この記事では、主に、node.js を使用して 1 STMP プロトコルに基づいてメールを送信する Node.js メソッドnode.js を使用して電子メールを送信する場合、基本的には有名な /** * Nodemailer を使用して STMP メールを送信します * @param {Object} opts 電子メール送信構成 * @param {Object} smtpCfg SMTP サーバー構成 */ 非同期関数sendMail(opts, smtpCfg) { const resultInfo = { コード: 0、 メッセージ: ''、 結果: null }; 場合 (!smtpCfg) { resultInfo.msg = '電子メール送信情報が設定されていません'; 結果情報コード = -1009; 結果情報を返します。 } // メールオブジェクトを作成する const mailOpts = Object.assign( { // 送信者: `Notify <${smtpCfg.auth.user}>`、 // 件名 subject: '通知', // テキスト: opts.content, //html: opts.content, // 添付ファイルの内容 // /*attachments: [{ // ファイル名: 'data1.json', // パス: path.resolve(__dirname, 'data1.json') // }, { // ファイル名: 'pic01.jpg', // パス: path.resolve(__dirname, 'pic01.jpg') // }, { // ファイル名: 'test.txt', // パス: path.resolve(__dirname, 'test.txt') // }],*/ }, オプション ); mailOpts.to の場合、mailOpts.to = []; Array.isArray(mailOpts.to) の場合、mailOpts.to は String(mailOpts.to).split(','); mailOpts.to = mailOpts.to.map(m => String(m).trim()).filter(m => m.includes('@')); if (!mailOpts.to.length) { resultInfo.msg = '電子メールの受信者が設定されていません'; 結果情報コード = -1010; 結果情報を返します。 } mailToList を mailOpts.to に設定します。 const トランスポーター = nodemailer.createTransport(smtpCfg); // 個別に送信するリスト for (const to of mailToList) { mailOpts.to = to.trim(); 試す { const info = transporter.sendMail(mailOpts); を待機します。 console.log('メールが送信されました:', mailOpts.to, ' response:', info.response); 結果情報.msg = 情報.応答; } キャッチ(エラー){ コンソール.log(エラー); 結果情報コード = -1001; resultInfo.msg = エラー; } } 結果情報を返します。 } メールを送信するには、sendMail メソッドを使用します。 定数opts = { 件名: 「テスト対象」 /** HTML 形式のメールコンテンツ*/ html: `テスト用のメール内容: <a href="https://lzw.me" rel="external nofollow" rel="external nofollow" >https://lzw.me</a>`, /** TEXT テキスト形式の電子メールの内容*/ 文章: ''、 宛先: '[email protected]', //添付ファイルリスト//添付ファイル: [], }; 定数smtpConfig = { ホスト: 'smtp.qq.com'、//QQ: smtp.qq.com; NetEase: smtp.163.com port: 465, //ポート番号。 QQメールボックス465、NetEaseメールボックス25 セキュア: true、 認証: ユーザー: '[email protected]', //メールアカウントパス: '', //メール認証コード}, }; sendMail(opts, smtpConfig) を実行して、console.log(result) を実行します。 2 MS Exchange メールサーバーに基づいてメールを送信する Node.js メソッドNodemailer は、Microsoft の Microsoft Exchange Server を使用して構築された電子メール サービスには無力です。 Exchange Web サービス (EWS) は、Exchange リソースにアクセスするためのインターフェイスを提供し、Microsoft の公式ドキュメントに詳細なインターフェイス定義ドキュメントがあります。 Exchange メール サービス用の一般的なサードパーティ ライブラリには、node-ews や ews-javascript-api などがあります。 2.1 node-ews を使用して MS Exchange メールを送信する以下では、node-ews モジュールを例として、Exchange メール サービスを使用して電子メールを送信する方法を紹介します。 2.1.1 ノードEWSに基づいて電子メールを送信するメソッドをカプセル化するsendMailByNodeEws メソッドをカプセル化します。 'node-ews' から EWS をインポートします。 エクスポートインターフェースIEwsSendOptions { 認証: ユーザー: 文字列; 合格?: 文字列; /** 暗号化されたパスワード キー (NTLMAuth.nt_password)。文字列の場合は、16進エンコードの結果になります*/ nt_password?: 文字列 | バッファ; /** パスワード暗号化キー (NTLMAuth.lm_password)。文字列の場合は、16進エンコードの結果になります*/ lm_password?: 文字列 | バッファ; }; /** 交換アドレス*/ ホスト?: 文字列; /** メールの件名 */ 件名?: 文字列; /** HTML 形式のメールコンテンツ*/ html?: 文字列; /** TEXT テキスト形式のメール本文コンテンツ (html パラメータよりも優先度が低い) */ テキスト?: 文字列; : 文字列; } /** * Exchange(EWS)を使用してメールを送信する*/ 非同期関数 sendMailByNodeEws(オプション: IEwsSendOptions) をエクスポートします。 const resultInfo = { コード: 0、 メッセージ: ''、 結果: null }; if (!オプション) { 結果情報コード = -1001; resultInfo.msg = 'オプションは null にできません'; } それ以外の場合は (!options.auth) { 結果情報コード = -1002; resultInfo.msg = 'Options.auth{user,pass} は null にできません'; } そうでない場合 (!options.auth.user || (!options.auth.pass && !options.auth.lm_password)) { 結果情報コード = -1003; resultInfo.msg = 'Options.auth.user または Options.auth.password は null にできません'; } if (resultInfo.code) は resultInfo を返します。 定数ewsConfig = { ユーザー名: options.auth.user, パスワード: options.auth.pass, nt_password: オプション.auth.nt_password、 lm_password: options.auth.lm_password、 ホスト: options.host、 // 認証: '基本', }; if (ewsConfig.nt_password && typeof ewsConfig.nt_password === '文字列') { ewsConfig.nt_password = Buffer.from(ewsConfig.nt_password, 'hex'); } if (ewsConfig.lm_password && typeof ewsConfig.lm_password === '文字列') { ewsConfig.lm_password = Buffer.from(ewsConfig.lm_password, 'hex'); } Object.keys(ewsConfig).forEach(キー => { if (!ewsConfig[key]) ewsConfig[key]を削除します。 }); // ノード EWS を初期化する EWS を新規に作成します。 //ews API関数を定義する const ewsFunction = 'CreateItem'; // ews API 関数の引数を定義する 定数ewsArgs = { 属性: メッセージ処理: 'SendAndSaveCopy'、 }, 保存されたアイテムフォルダー ID: { 識別フォルダー ID: { 属性: ID: 'sentiment', }, }, }, アイテム: { メッセージ: { アイテムクラス: 'IPM.Note'、 件名: options.subject, 体: { 属性: 本文タイプ: options.html ? 'HTML' : 'テキスト', }, $value: options.html || options.text, }, 受信者: { メールボックス: メールアドレス: options.to, }, }, IsRead: 'false'、 }, }, }; 試す { const 結果 = ews.run(ewsFunction, ewsArgs); を待機します。 // console.log('メールが送信されました:', options.to, ' response:', result); 結果情報.result = 結果; 結果が ResponseMessages.MessageText の場合、 resultInfo.msg は結果が ResponseMessages.MessageText になります。 } キャッチ (エラー) { console.log(err.stack); 結果情報コード = 1001; 結果情報.msg = err.stack; } 結果情報を返します。 } メールを送信するには、sendMailByNodeEws メソッドを使用します。 送信メールByNodeEws({ 認証: ユーザー: '[email protected]', パス: '123456', /** 暗号化されたパスワード キー (NTLMAuth.nt_password)。文字列の場合は、16進エンコードの結果になります*/ nt_パスワード: ''、 /** パスワード暗号化キー (NTLMAuth.lm_password)。文字列の場合は、16進エンコードの結果になります*/ lm_パスワード: ''、 }, /** 交換アドレス*/ ホスト: 'https://ews.xxx.com', /** メールの件名 */ 件名: 「テスト対象」 /** HTML 形式のメールコンテンツ*/ html: `テスト用のメール内容: <a href="https://lzw.me" rel="external nofollow" rel="external nofollow" >https://lzw.me</a>`, /** TEXT テキスト形式のメール本文コンテンツ (html パラメータよりも優先度が低い) */ 文章: ''、 宛先: '[email protected]', }) 2.1.2 NTLMAuthに基づく認証設定pass パスワードを直接設定すると、プレーンテキスト パスワードが公開される可能性があります。pass フィールドを空白のままにして、nt_password フィールドと lm_password フィールドを設定し、NTLMAuth 認証モードを使用することができます。これら 2 つのフィールドは、パスのプレーン テキストに基づいて生成されます。Node.js 生成方法は、httpntlm モジュールの助けを借りて完了できます。具体的な参照は次のとおりです。 'httpntlm' から ntlm を NTLMAuth としてインポートします。 /** 入力された電子メール アカウントのパスワードを NTLMAuth キー (16 進数) 形式に変換して出力します */ 定数 getHashedPwd = () => { const passwordPlainText = process.argv.slice(2)[0]; if (!passwordPlainText) { console.log('USEAGE: \n\tnode get-hashed-pwd.js [パスワード]'); 戻る; } const nt_password = NTLMAuth.create_NT_hashed_password(passwordPlainText.trim()); lm_password = NTLMAuth.create_LM_hashed_password(passwordPlainText.trim()); // console.log('\n パスワード:', passwordPlainText); console.log(`nt_password:`, nt_password.toString('hex')); console.log(`lm_password:`, lm_password.toString('hex')); 戻る { nt_パスワード、 lm_パスワード、 }; }; ハッシュされたパスワードを取得します。 2.2 ews-javascript-api を使用して MS Exchange メールを送信するews-javascript-api によるメール送信方法に基づいて、公式 wiki に関連例がありますが、サーバー認証を取得できなかったためにテスト プロセスに失敗し、具体的な理由を確認できなかったため、次のコードは参考用です。 /** * `ews-javascript-api` を使用して (MS Exchange) メールを送信します */ 非同期関数 sendMailByEwsJApi(オプション: IEwsSendOptions) をエクスポートします。 const resultInfo = { コード: 0、 メッセージ: ''、 結果: null }; if (!オプション) { 結果情報コード = -1001; resultInfo.msg = 'オプションは null にできません'; } それ以外の場合は (!options.auth) { 結果情報コード = -1002; resultInfo.msg = 'Options.auth{user,pass} は null にできません'; } そうでない場合 (!options.auth.user || (!options.auth.pass && !options.auth.lm_password)) { 結果情報コード = -1003; resultInfo.msg = 'Options.auth.user または Options.auth.password は null にできません'; } ews は 'ews-javascript-api' を必要とします。 ews.ExchangeService を新しい Exchange2010 に追加します。 exch.Credentials = 新しい ews.WebCredentials(options.auth.user、options.auth.pass); exch.Url = 新しい ews.Uri(options.host); ews.EwsLogging.DebugLogEnabled = true; // デバッグをオフにするには false にします。 const msgattach = new ews.EmailMessage(exch); msgattach.Subject = オプション.subject; msgattach.Body = 新しい ews.MessageBody(ews.BodyType.HTML、escape(options.html || options.text)); if (!Array.isArray(options.to)) options.to = [options.to]; options.to.forEach(to => msgattach.ToRecipients.Add(to)); // msgattach.Importance = ews.Importance.High; // 添付ファイルを送信 // msgattach.Attachments.AddFileAttachment('filename to attachment.txt', 'c29tZSB0ZXh0'); 試す { const result = await msgattach.SendAndSaveCopy(); // .Send(); console.log('完了!', 結果); 結果情報.result = 結果; } キャッチ (エラー) { console.log('エラー:', err); 結果情報コード = 1001; 結果情報.msg = エラー; } 結果情報を返します。 } 3 拡張参照nodemailer.com/about/ 上記は、STMP プロトコルと EWS プロトコルに基づいて node.js がメールを送信する詳細です。node.js のメール送信の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: MySql ログイン パスワードを忘れた場合とパスワードを忘れた場合の解決策
>>: Ubuntu で G++ を使用して CPP ファイルをコンパイルする
ここで商品テーブルを作成しました。その中のデータを見てみましょう。 mysql> 商品から *...
SQL の基礎知識がある友人は、「クロステーブル クエリ」について聞いたことがあるはずですが、クロス...
MySQLはトリガーを使用してデータベース内のテーブルの行制限を解決します。詳細な説明と例最近のプロ...
MySQL の多くのテーブルには、NULL が列のデフォルト属性であるため、アプリケーションが NU...
Vim は Linux でよく使用されるテキスト エディターです。 Vim は、Sublime や ...
序文この記事では、SQL インジェクションを回避するために pdo の前処理メソッドを使用します。詳...
【序文】当プロジェクトの SMS 機能は、第三者に接続することです。第三者からの元の受信確認要求は ...
なぜprettierを使うのですか?大企業では、フロントエンド開発コードに独自のコード標準がある場合...
セルでは、明るい境界線の色を個別に定義できます。 > 基本構文<TD ボーダーカラーライ...
現在、ますます多くのフロントエンド開発者が、元のテーブル レイアウトを xHTML + CSS に置...
ElasticSearch クラスターは、クラスターを構築するための動態請求的方式と靜態配置文件をサ...
同僚から、MySQL データ型 DECIMAL(N,M) の N と M の意味を尋ねられました。言...
Linux インストール MySQL ノート1. MySQL データベース サーバーをインストールす...
この記事は、Ubuntu 17.10 での Docker CE のインストールを記録するために使用さ...
1. ROW_NUMBER()定義: ROW_NUMBER() 関数は、select によってクエリ...