NodemailerでBase64の画像を添付する

公開日:2021/8/23更新日:2023/1/21

NodemailderでBase64エンコードされた画像を送る場合、pathに文字列をそのまま指定するだけで添付できます。前半のメタ部分data:image/jpeg;base64を正規表現で削除する必要も、エンコード形式にbase64を指定する必要もありません。

以下がサンプルコードです。

import { createTransport } from "nodemailer";

// postされたデータと仮定
const attachment = {
  name: "example-picture.jpg",
  url: "data:image/jpeg;base64,/9j/4AAQSk.."
};

const transporter = createTransport({
  host: "mail.example.com",
  port: 465,
  secure: true,
  auth: {
    user: process.env.MAIL_AUTH_USER,
    pass: process.env.MAIL_AUTH_PASS
  }
});

transporter.sendMail({
  from: `"Shinobi Works" <[email protected]>`,
  to: `[email protected]`,
  subject: "問い合わせがありました",
  attachments: [
    {
      filename: attachment.name, // example-picture.jpg
      path: attachment.url // data:image/jpeg;base64,/9j/4AAQSk..
    }
  ],
  text: `サイトにお問い合わせがありました...(略)`
});