Lambdaで添付ファイル付きメールを送る
LambdaでNodemailerを使う機会があったのでメモを残します
Nodemailerとは
Node.jsで簡単にメールを送ることができるモジュールです。
公式 https://nodemailer.com/about/
npmのページ https://www.npmjs.com/package/nodemailer
やりたいこと
S3に置いているPDFファイルを添付したメールを送信する
手順
- メールアドレスの認証
- 必要な権限を付与
- ローカルでモジュールを準備
- Lambdaのコンソール画面でzipをアップロード
1. メールアドレスの認証
サンドボックス解除前のSESは、差出人や宛先に指定するメールアドレスの認証が必要です。
- SES Homeを開く
- Email Addresses > Verify a New Email Address
- メールアドレスを入力
- 「Amazon Web Services – Email Address Verification Request in region Asia Pacific (Tokyo)」というメールが届くのでメール内のリンクを踏む
2. 必要な権限を付与
- Lambdaの実行ロールの概要画面を開く
- インラインポリシーの追加
- SESのSendRawEmail、S3のGetObjectのアクセス許可を追加する
3. ローカルでモジュールを準備
- 適当なディレクトリを作成
mkdir test
- 初期化
npm init
- nodemailerインストール
npm install nodemailer
- test/node_modulesが作られていることを確認
- test/index.jsを作成(中身はlambdaで動かしたいコード)
- node_modulesとindex.jsをまとめてzip化
4. Lambdaのコンソール画面でzipをアップロード
- 関数の画面を開く
- 「アップロード元」のリストから「.zipファイル」を選択
- ローカルで作成したzipファイルを指定してアップロード
今回使ったLambdaのコード
index.js
const AWS = require('aws-sdk')
const nodemailer = require('nodemailer')
const transporter = nodemailer.createTransport({
SES: new AWS.SES({ apiVersion: '2010-12-01' }),
})
const s3 = new AWS.S3({ apiVersion: '2006-03-01' })
const fs = require('fs').promises
exports.handler = async (event) => {
//S3に置いているPDFを/tmp配下にコピー
const paramsForS3 = {
Bucket: 'バケット名',
Key: 'ファイル名',
}
const contents = await s3.getObject(paramsForS3).promise()
const path = '/tmp/ファイル名'
await fs.writeFile(path, contents.Body)
// メール送信
await transporter.sendMail({
from: '差出人のメールアドレス',
to: '宛先のメールアドレス',
subject: 'メールの件名',
text: 'メール本文',
attachments: [
{
filename: '添付ファイル名', //元のファイル名とは別の名前で添付したい場合はここで設定(非必須項目)
path: path,
},
],
})
}
Author And Source
この問題について(Lambdaで添付ファイル付きメールを送る), 我々は、より多くの情報をここで見つけました https://qiita.com/wdmmm/items/11ec72d2f2287e31e771著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .