Lambda에서 첨부파일이 있는 이메일 보내기

Lambda에서 Nodemailer를 사용할 기회가 있었기 때문에 메모를 남겨 둡니다

Nodemailer란?



Node.js로 쉽게 메일을 보낼 수 있는 모듈입니다.
공식 h tps : // / 그래서 r. 코 m/아보 t/
npm 페이지 htps //w w. 음 pmjs. 코 m / Pac 가게 / 그래서 Mai r

하고 싶은 일



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 파일을 지정하여 업로드

  • 이번에 사용한 람다 코드



    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,
          },
        ],
      })
    }
    
    

    좋은 웹페이지 즐겨찾기