Node.jsでAWS SESを使い送信者名を設定してメールを送信する

こんばんは、AWSのSES(SimpleEmailService)で送信者名を設定してメールを送信するのに少し手こずったので記録しておきます。Typescriptです。

メールの送信者名とは、gmailでメールを見るとこういう感じで表示されている部分のことを指します。これを設定しないとgmailなどのメールクライアントでは送信元メールアドレスが送信者名として表示され、人間が判別がつきにくいです。そのため、だいたいのサービスのメールでは送信社名が設定されている印象があります。

/img/2022-05-19.png

メールに送信者名を載せる方法はRFCで決まっていて以下の通りで、メールヘッダのFromを特殊な形式で記述します。

From: {encoded-word形式でエンコードされた文字列} <{送信元メールアドレス}>

送信者名はencoded-wordというフォーマットでエンコードする必要があります。具体的なエンコードの方法はRFC2047で決められているようですが、Node.jsでエンコードする場合はlibmimeというライブラリを利用して簡単にエンコードできます。

サンプルコードを貼っておきます↓

import aws from 'aws-sdk';
import libmime from "libmime"

const ses = new aws.SES({ apiVersion: '2010-12-01' });

const senderName = "もりもりこちゃん"
const fromEmail = "email.morifuji-is.ninja"

const to = "~~~~~~"

await ses.sendEmail({
  Source: `${libmime.encodeWord(senderName)} <${fromEmail}>`,
  Destination: { ToAddresses: [to] },
  Message: {
    Subject: {
      Data: 'hello from ses'
    },
    Body: {
      Text: {
        Data: 'hello',
      }
    }
  }
}).promise()

実際に利用する際は、エンコード不可な文字列がいくつかあるため注意してください。また、メールヘッダのサイズは決められていると思うので送信者名の最大長にも注意して下さい

参考になったwebサイトは以下の通りです。


See also