nodemailerとさくらのメールサーバからメールを送信

nodemailerからさくらのメールサーバ経由でメールを送信する

普通には送信できない

以下のような587ポートへの接続は失敗する。

port: 587,
secure: true,

メッセージは以下のようなものが表示される。

Error: 47437359817600:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:827: code: 'ECONNECTION', command: 'CONN' }

587を指定しているのに465が強制される

これは、Nodeでさくらのメールを使うを読むまでは全くわからなかった。

そのため、以下のように設定を行う。

const transporter = mail.createTransport({
  host: 'XXX.sakura.ne.jp',
  port: 587,
  secure: false,
  requireTLS: true,
  auth: {
      user: 'username',
      pass: 'password'
  }
});

海外のサービスからアクセスする際は注意

海外からさくらに対してアクセスさせる際は注意しなければならない。 具体的には、私はfirebse functionsのusリージョンからアクセスをさせようとしていたため、エラーが発生した。 メッセージは以下。

Error: Mail command failed: 550 5.7.1

これを回避するには、さくらの国外IPアドレスのフィルタを無効にする必要がありそう。 無効にするにはドキュメントをを参照。 (他人のサーバなのでこれ以上は試していない)