※ 私が株式会社愛宕 Advent Calendar用に書く記事は主に社内向けに共有しておきたいけど勉強会をするまでもないちょっとしたTipsにしたいと思います。
今日はタイトルの通りメールのFROMとかに生のメールアドレスじゃなくて名前を表示させるのってどうやるの?って話題です。
Node.js環境でJavaScriptやTypeScriptなどを使って実装することを考えてみます。
普通はメールアドレスを設定する箇所にメールアドレスを設定すれば、送信先のメーラーからもそのように見えるはずです。
例えば、FROMにjohn_doe@example.com
を設定すれば、送信先のメーラーでは
FROM: john_doe@example.com
となっているでしょう。
では、
FROM: John Doe <john_doe@example.com>
のようにするには?
これはそのまま、メールヘッダにJohn Doe <john_doe@example.com>
という文字列を設定すればよいです。
後半の<
と>
で括られた部分がアドレスとして扱われます。
問題は、ASCII以外の文字列を前半の送信者名の部分に設定する場合です。
そのまま書けないのでBase64でエンコードする必要があります。
例えば、次ような関数を使ってエンコードしてから設定します。
/**
* ASCII以外の文字列を送信者名として埋め込む関数
*
* @params name String 送信者名
* @params email String メールアドレス
* @returns String
*/
function embedFriendlyName(name, email) {
const encoded = Buffer.from(name).toString("base64")
return `=?utf-8?B?${encoded}?= <${email}>`
}
この場合は、UTF-8の文字列をBase64にエンコードして埋め込んでいます。