AWS Lambda筆記-SES發(fā)電子郵件-12【含源代碼】

應(yīng)用程序中最常用的功能是發(fā)電子郵件。例如:用戶注冊成功,找回密碼项钮,電子賬單等都需要。AWS也提供了發(fā)電子郵件的服務(wù)叫SES(Simple Email Service)希停,只需要幾行代碼即可方便的發(fā)送各種郵件烁巫。

  1. SES配置和注意事項
  2. Lambda發(fā)送電子郵件

源代碼

代碼下載地址:https://pan.baidu.com/s/1vpBnbuxbiPwy1W_y51B6yw
提取碼:v2a3

工程說明

首先配置SES的域名并確認配置成功,然后在用戶注冊工程(lambda-userregistration)中添加發(fā)送郵件功能宠能,在cloudformation.template中配置權(quán)限和發(fā)件箱環(huán)境變量亚隙。


工程關(guān)系配置

1. SES配置和注意事項

使用SES服務(wù),需要進行簡單的域名配置违崇“⑵可以通過AWS CLI,也可以通過AWS SES控制臺配置羞延。
1)配置域名并驗證
2)配置DNS服務(wù)
3)SNS沙盒模式限制和白名單配置
4)解鎖SNS沙盒模式

1)配置域名并驗證
準備一個域名并在Route 53 上進行NS配置渣淳。若沒有配置可以參考《AWS Lambda筆記-內(nèi)容分發(fā)(CDN)-7》-2. 配置自定義域名樱拴。
登陸SES控制臺https://console.aws.amazon.com/ses/home選擇左邊菜單“Domains”誊抛,按以下截圖配置。圖片第4步深碱,勾選DKIM是一個在檢測電子郵件欺詐的電子郵件認證方法嗤谚,把這個設(shè)置添加到域中對于確保郵件的可交付性是個不錯的選擇砂客。

配置域名并驗證
驗證域名

創(chuàng)建Route53記錄

我們登陸Route 53 控制臺,我們會發(fā)現(xiàn)記錄自動創(chuàng)建完成,登陸并確認下呵恢。刷新下SES控制臺會發(fā)現(xiàn)之前驗證域名的狀態(tài)從“pending verification” >“verified”通過驗證鞠值。整個過程非常快渗钉,只需幾秒即可完成彤恶。
注意:如果域名不在Route53上,以上TXT鳄橘,MX声离,CNAME記錄需要Copy添加到手動配置到自己的域名解析中。

Route 53控制臺界面

SES控制臺域名驗證成功

3)SNS沙盒模式限制和白名單配置
目前域名順利驗證通過瘫怜,但是還處于“沙盒模式”术徊,在沙盒模式下賬戶不能通過賬號隨便發(fā)送給其他郵箱,如果想發(fā)郵件鲸湃,可以通過添加白名單赠涮,對方郵箱驗證通過后才能給對方郵箱發(fā)郵件子寓。


添加驗證郵箱
打開驗證的郵箱
驗證通過

4)解鎖SNS沙盒模式
要解鎖沙盒模式,給想要的人發(fā)郵件笋除,我們需要申請一個技術(shù)支持才能解鎖賬戶斜友。訪問導(dǎo)航頁面填寫表單https://aws.amazon.com/ses/extendedaccessrequest/按照表單的要求填寫內(nèi)容即可。

技術(shù)支持頁面

2. Lambda發(fā)送電子郵件

用戶注冊成功后可以發(fā)送一份歡迎郵件垃它,AWS提供了發(fā)送郵件的SDK(aws-java-sdk-ses), 這里只是單純的發(fā)郵件鲜屏,并且郵箱在SES的白名單中,所有我們可以任意模擬一個郵箱前綴就可以通過代碼發(fā)送郵件国拇,例如:hello@domain.com(domain.com 是上一步我們認證通過的域名洛史,hello是隨意取的名稱)。
1)添加aws-java-sdk-ses的依賴包
2)向Lambda的IAM許可中添加權(quán)限
3)Lambda發(fā)送Email

1)添加aws-java-sdk-ses的依賴包
在用戶注冊工程(lambda-userregistration)的build.gradle中添加SES JDK依賴

compile group: 'com.amazonaws', name: 'aws-java-sdk-ses', version: '1.11.+'

2)向Lambda的IAM許可中添加權(quán)限
在cloudformation.template的LambdaCustomPolicy權(quán)限中添加酱吝,若忘記添加權(quán)限也殖,在發(fā)郵件是log日志中會有個 Service: AmazonSimpleEmailService; Status Code: 403; Error Code: AccessDenied; 的提醒。

{
      "Effect": "Allow", 
     "Action": [
      "ses:*"
    ],
   "Resource": "*"
}

為方便配置掉瞳,可以把發(fā)送的Email地址寫到Lambda的環(huán)境變量中毕源,在取出是只需要System.getenv("SenderEmail")即可。(example.com換成自己通過SES認證的域名)
UserRegistrationLambda的Lambda配置中添加環(huán)境變量:

"SenderEmail": "lazy@example.com"

3)Lambda發(fā)送Email
我們在lambda-userregistration的Handle.java 中添加發(fā)送郵件的代碼陕习,通過SES發(fā)郵件霎褐,我們需要創(chuàng)建AmazonSimpleEmailServiceClient的實例,我們是通過Guice來完成依賴注入该镣。
注意冻璃,這里的 setSimpleEmailServiceClient()的@Inject是采用默認依賴注入。即通過new AmazonSimpleEmailServiceClient()的方式注入到setSimpleEmailServiceClient()中损合。

    private AmazonSimpleEmailServiceClient simpleEmailServiceClient;
    //直接注入new的AmazonSimpleEmailServiceClient對象
    @Inject
    public Handler setSimpleEmailServiceClient(
            AmazonSimpleEmailServiceClient simpleEmailServiceClient) {
        this.simpleEmailServiceClient = simpleEmailServiceClient;
        return this;
    }

    private void sendEmail(final String emailAddress) {
        //收件地址
        Destination destination = new Destination().withToAddresses(emailAddress);
        //郵件內(nèi)容
        Message message = new Message()
                .withBody(new Body().withText(new Content("Welcome J⊙蕖!!")))
                .withSubject(new Content("Welcome!"));
        //發(fā)送郵件嫁审,發(fā)件地址從配置的環(huán)境變量中獲取System.getenv("SenderEmail")
        try {
            LOGGER.debug("Sending welcome mail to " + emailAddress);
            simpleEmailServiceClient.sendEmail(new SendEmailRequest()
                    .withDestination(destination)
                    .withSource(System.getenv("SenderEmail"))
                    .withMessage(message)
            );
            LOGGER.debug("Sending welcome mail to " + emailAddress + " succeeded");
        } catch (Exception anyException) {
            LOGGER.error("Sending welcome mail to " + emailAddress + " failed: ", anyException);
        }
    }

  @Override
    public RegistrationOutput handleRequest(RegistrationInput input, Context context) {
        User createdUser = userService.registerNewUser(input.username, input.email);
        //用戶注冊成功跋炕,發(fā)送郵件
        sendEmail(input.email);
        //返回生成user的原始URL
        return new RegistrationOutput(createdUser);
    }

發(fā)布工程./gradlew delploy 我們可以驗證下,注冊的email目前必須在SES中添加的白名單中律适。

用戶注冊

郵箱接收注冊成功郵件

異常一

com.amazonaws.services.simpleemail.model.AmazonSimpleEmailServiceException:
User `arn:aws:sts::083845954160:assumed-role/serverlessbook-LambdaExecutionRole-1CQQ1SF5ASHEB/serverlessbook-UserRegistrationLambda-J9E431B4RLGX' is not authorized to perform `ses:SendEmail' on resource `arn:aws:ses:us-east-1:083845954160:identity/cdn.kkkkkk.com' (Service: AmazonSimpleEmailService; Status Code: 403; Error Code: AccessDenied; Request ID: f89ffbff-8c20-4ac2-b819-5313ef181f88; Proxy: null)

這邊主要是在Lambda的IAM中沒有配置權(quán)限辐烂,添加發(fā)送郵件權(quán)限即可。

{
  "Effect": "Allow",
  "Action": [
    "ses:*"
  ],
  "Resource": "*"
}

源代碼

代碼下載地址:https://pan.baidu.com/s/1vpBnbuxbiPwy1W_y51B6yw
提取碼:v2a3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捂贿,一起剝皮案震驚了整個濱河市纠修,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厂僧,老刑警劉巖扣草,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡辰妙,警方通過查閱死者的電腦和手機鹰祸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來上岗,“玉大人福荸,你說我怎么就攤上這事蕴坪‰戎溃” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵背传,是天一觀的道長呆瞻。 經(jīng)常有香客問我,道長径玖,這世上最難降的妖魔是什么痴脾? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮梳星,結(jié)果婚禮上赞赖,老公的妹妹穿的比我還像新娘。我一直安慰自己冤灾,他們只是感情好前域,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著韵吨,像睡著了一般匿垄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上归粉,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天椿疗,我揣著相機與錄音,去河邊找鬼糠悼。 笑死届榄,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的倔喂。 我是一名探鬼主播铝条,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼滴劲!你這毒婦竟也來了攻晒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤班挖,失蹤者是張志新(化名)和其女友劉穎鲁捏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡给梅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年假丧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片动羽。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡包帚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出运吓,到底是詐尸還是另有隱情渴邦,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布拘哨,位于F島的核電站谋梭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏倦青。R本人自食惡果不足惜瓮床,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望产镐。 院中可真熱鬧隘庄,春花似錦、人聲如沸癣亚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逃糟。三九已至吼鱼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绰咽,已是汗流浹背菇肃。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留取募,地道東北人琐谤。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像玩敏,于是被迫代替她去往敵國和親斗忌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349