amazon配置邮件推送服务

  |  

亚马逊邮箱推送配置

  1. 进入Amazon Simple Email Service服务
    在这里插入图片描述

  2. 在 Account dashboard->Simple Mail Transfer Protocol (SMTP) settings->create SMTP credentials 创建简单邮件传输协议 (SMTP) - (如果不想设置就用最高账户)
    在这里插入图片描述
    记好对应的 smtp user 和 smtp password
    忘了也没事 可以在IAM 控制面板
    在这里插入图片描述

  3. 修改对应权限 把 ses 的权限都选中
    在这里插入图片描述

  4. 配置域名
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  5. 配置管理集 (例如取名-noreply)
    6.

  6. 获取 Amazon SES SMTP 凭证
    文档https://docs.aws.amazon.com/zh_cn/ses/latest/dg/smtp-credentials.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import * as crypto from "crypto";
// The values of the following variables should always stay the same.
const date = "11111111";
const service = "ses";
const terminal = "aws4_request";
const message = "SendRawEmail";
const version = "04";
const region = "us-west-1";

// Modify this variable to include your AWS secret access key
const key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";

const kDate = HmacSha256(date, Buffer.from("AWS4" + key, "utf8"));
const kRegion = HmacSha256(region, kDate);
const kService = HmacSha256(service, kRegion);
const kTerminal = HmacSha256(terminal, kService);
const kMessage = HmacSha256(message, kTerminal);
const signatureAndVersion = Buffer.concat([
Buffer.from(version, "hex"),
kMessage,
]);

// 获取smtpPassword 以后就可以永久使用了 除非更新了 AWS secret access key
const smtpPassword = signatureAndVersion.toString("base64");

function HmacSha256(data: string, key: Buffer) {
return crypto.createHmac("sha256", key).update(data).digest();
}
  • 发送邮件-使用 smtp 发送
1
2
3
4
5
6
7
8
9
10
11
import * as nodemailer from "nodemailer";
const mailer = nodemailer.createTransport({
host: "email-smtp.us-west-1.amazonaws.com",
port: "465",
ignoreTLS: true,
secure: true,
auth: {
user: "AWS 访问密钥 ID",
pass: smtpPassword,
},
});
  • 发送邮件-使用 npm 包 发送
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const mailerService = new SES({
region: "us-west-1",
credentialDefaultProvider: (input: any) => () =>
Promise.resolve({
accessKeyId: "AWS 访问密钥 ID",
secretAccessKey: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", // secret access key
}),
});
/** 收件人邮箱 */
const destination = {
/** 收件 */
ToAddresses: ["test@qq.com"],
/** 抄送 */
// CcAddresses: [],
/** 密件抄送 */
// BccAddresses:[]
};
/** 标题 */
const subject = {
Data: "test",
Charset: this.mailInfo.charset,
};
/** 内容 */
const body = {
Html: {
Data: "<P>test</P>",
Charset: "UTF-8",
},
};

const res = await this.mailerService.sendEmail({
Message: { Subject: subject, Body: body },
Source: from,
Destination: destination,
ConfigurationSetName: "noreply", // 上面配置的管理集
});
  1. 移出 Amazon SES 沙盒
    文档https://docs.aws.amazon.com/zh_cn/ses/latest/dg/request-production-access.html

在这里插入图片描述
在这里插入图片描述

注意: 里面内容不用乱写,最好详细介绍你为啥要使用这个,不然容易驳回

出现的问题

  1. 没有移除邮箱不能随便发送到其他邮箱,可以自己添加对应的邮箱到 amazon ses 中,他会发一封验证邮件 验证通过就可以测试邮件发送了

  2. 关于发送邮件日志的查询
    还在处理中 文档 Amazon Simple Email Service(Amazon SES)中查看电子邮件发送历史记录。该如何操作?

邮件接收回调

由于流记录那种方式没有配置成功,所以还是配置回调来记录接收情况。
文档: 使用 Amazon SES 控制台来配置通知

  1. 创建主题 https://us-west-1.console.aws.amazon.com/sns/v3/home?region=us-west-1#/topics
    在这里插入图片描述
  2. 为主题增加订阅
    在这里插入图片描述
    选择 https 协议,如果选择邮箱太烦了,这样就会推送到你的服务器上
    在这里插入图片描述
  3. 服务器接收 - 它是 text/plain 方式请求过来的 拿出里面的SubscribeURL
1
2
3
4
5
6
7
8
9
10
11
12
13
const result: string = await new Promise((resolve, reject) => {
let data = "";
req.setEncoding("utf8");
req.on("data", function (chunk) {
data += chunk;
});
req.on("end", function () {
resolve(data);
});
req.on("error", (err) => reject(err));
});

// 或者直接 req.body
  1. 使用SubscribeURL 来确认订阅 正常就可以了
    在这里插入图片描述
  2. 接入到对应的发送邮件域名中

在这里插入图片描述
主题选择你自己设置的名称就可以了

文档

Amazon Kinesis Data Firehose 加载流数据
为 Amazon SES 事件发布设置 Kinesis Data Firehose 事件目的地
流控制台
监控您的 Amazon SES 发送活动
为 Amazon SES 配置 Amazon SNS 通知
Amazon Simple Email Service(Amazon SES)中查看电子邮件发送历史记录。该如何操作?
关于移除沙盒

文章目录
  1. 1. 亚马逊邮箱推送配置
  2. 2. 出现的问题
  3. 3. 邮件接收回调
  4. 4. 文档