質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

1回答

3548閲覧

node.jsで複数名にメールを送信する方法について

kansai5963

総合スコア23

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2020/07/31 07:50

node.jsを使用してTO、CCの複数名に同時にメール送信する方法を探しております。
プログラムの流れといたしましては、
①テーブルからメールアドレス1を取得
②テーブルからメールアドレス2を取得
③次のプログラムを実行
といった感じで作成しておりますが、

req.session.mail_address1 = results[0].mail_address1; req.session.mail_address2 = results[0].mail_address2; var cc1 = req.session.mail_address2; var cc2 = 'xxx@yyy.com;www@qqq.com'; var smtp = nodemailer.createTransport({ host: 'xx.xxx.xx.xx', port: 25 }); //メール情報の作成 var message = { from: 'aaa@bbb.com', to: req.session.mail_address1, cc: cc1, cc: cc2, subject: 'subjectに関する件', text: '本文記載' }; // メール送信 smtp.sendMail(message, function(error, info){ });

こちらを実行した際にメールがうまく配信されません。
修正箇所等ございましたらご教示願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

メールがうまく配信されません。

うまく配信されませんというのは、
そもそも誰にもメールが送られない、CCの全員に送られない、その他のどれなんでしょうか?
これは回答者という他人から質問文の状況を読むだけでは全くわかりません。

なので問題の切り分けをしっかりするようお願いします。
このフェイズに到達しないと何も手助けは出来ません。
とりあえず3点を確認してみてください。

  • メール送信実行のコールバック関数にデバッグプリントを仕込む
  • オブジェクトは同名のキーを2つ所持できない
  • ISPなどの制限でメールが送信できない可能性がある

メール送信実行のコールバック関数にデバッグプリントを仕込む

それが動作したのか、してないのかを確認することは非常に重要です。
下記のようなコードに変更してみてください。

js

1smtp.sendMail(message, function(error, info){ 2 if (error) console.error(error); 3 console.log(info); 4});

オブジェクトは同名のキーを2つ所持できない

js

1var message = { 2 from: 'aaa@bbb.com', 3 to: req.session.mail_address1, 4 cc: cc1, 5 cc: cc2, // <- この行がアウト 6 7 subject: 'subjectに関する件', 8 text: '本文記載' 9};

表題の通りです。
Chromeのコンソールで確認してみましょう。

> {a: 123, a: 234} {a: 234}

潰れて後のキーだけしか存在できていない事が確認できます。
上の方でvar cc2 = 'xxx@yyy.com;www@qqq.com';としているように
;で区切れば複数のメールアドレスを指定できるようなので、
cc: cc1 + ';' + cc2,という風にすれば動作するのではないでしょうか?

もしこのcc1が空かもしれない!ということであれば、
三項演算子を使って
cc: (cc1 ? cc1 + ';' : '') + cc2,`みたいにすれば解決するでしょう。

ISPなどの制限でメールが送信できない可能性がある

最後、これはプログラミングのコードの問題とは異なりますが、
インターネットでは様々な迷惑メールが飛び交っています。

インターネットを利用するだけで誰でも簡単にメールが送信できると
悪意のユーザーが捨てプロバイダからメールを全世界に送信しまくるみたいな事が可能になってしまいます。

そこで、ISO(インターネットサービスプロバイダ)のうち、
個人利用の回線の多くは好き勝手にメールが送信できないよう制限がかけられています。

まずCC部分が正常に動作しないのか?そもそもメールが送信出来ないのか?
……という風に問題を切り分けて考えるようにしてみてください。


【追記】 CCの指定内容

そもそもCCが;区切りって何を見て決めたんですか?
ちょっと調べてみましょう。

ソースコードにはnodemailerという変数が存在します。
これってこのライブラリを指していますか?
https://nodemailer.com/about/

もしそうなら;が問題で確定でしょうね。
「Common fields」の「cc」には下記のように記載されています。

cc: Comma separated list or an array of recipients email addresses that will appear on the Cc: field

意訳: Ccフィールドに表示される受信者のメールアドレスのカンマ区切りリスト、または配列

英語能力カスの私が頑張った解読結果ではなく、
機械学習のすごいやつDeepLに翻訳させたので間違いはないでしょう。

許されるのは下記の2つです。

  • カンマ区切り: "a@example.com,b@example.com"
  • 配列: ["a@example.com", "b@example.com"]

JavaScriptは文字列から配列を作るためのメソッドが用意されており、
splitを使う事で行なえます。

また、Node.jsはES2015に対応しているので
スプレッド構文が可能です。
配列に1個付け足すなど...を使えば瞬殺です。

コードにするとこんな感じになるんですかね?

js

1const cc2 = 'xxx@yyy.com;www@qqq.com'.split(';') 2 3const message = { 4 cc: (cc1 ? [cc1, ...cc2] : cc2), 5}

こんな風に、有名どころのライブラリには
作者が残した使い方説明書(Usage)が引っ付いているので、
それを見る癖をつけるようにしてください。

英語で辛い?
1パラグラフ程度ならDeepL様が瞬殺で翻訳してくれるので大丈夫です。
デスクトップ版を入れておけばわからない文章をドラッグしてCtrl+Cを2回叩くだけで日本語になります。

投稿2020/07/31 08:19

編集2020/08/03 10:03
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kansai5963

2020/08/03 09:09

質問がわかりづらく大変申し訳ございません。 cc2には配信されておりますが、cc1が配信されていない状態です。 ご回答いただきましたcc: cc1 + ';' + cc2,としておりますが、cc1には配信されないことも 確認しております。cc1の値はメールアドレスそのもののため、ダブルクオーテーション等で 囲わなくてはならないのでしょうか?
miyabi-sun

2020/08/03 09:49

なるほど、そもそもメールは送ることは可能で CCの指定方法がよく分からないのが質問内容ですね。 回答を追記しますので、少々お待ちください。
kansai5963

2020/08/03 23:40

お手数をおかけいたします。 何卒よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問