邮件服务
功能
- 发送单个邮件
- 发送批量邮件
- 记录发送事件
参考文档
https://docs.aws.amazon.com/zh_cn/pinpoint/latest/developerguide/event-streams-data-email.html
环境变量
.env
- AWS_ACCESS_KEY=AKIAXXXXXXXXF6WXD
- AWS_ACCESS_SECRET=GvJiTVXzrXXXXXXXXXXXj7CSjdvWn7en0
- AWS_REGION=us-east-1
- AWS_PINPOINT_APP_ID=
- AWS_PINPOINT_EMAIL_FROM=client@email.com
- AWS_PINPOINT_SMS_KEYWORD=
- AWS_PINPOINT_SMS_MESSAGE_TYPE=TRANSACTIONAL
- AWS_PINPOINT_SMS_ORIGINATION_NUMBER=+1xxx555xxx
- AWS_PINPOINT_SMS_SENDER_ID=Pinpoint
AWS Classes and Methods
- Pinpoint.sendMessages(params = {}, callback) ``` params { MessageRequest: {
[Addresses]: {
ChannelType: "PUSH"/"GCM"/"APNS"/"APNS_SANDBOX"/"APNS_VOIP"/"APNS_VOIP_SANDBOX"/"ADM"/"SMS"/"VOICE"/"EMAIL"/"BAIDU"/"CUSTOM"
}
}
}
callback function(err, data) { data.MessageResponse.EndpointResult.MessageId; data.MessageResponse.RequestId; data.MessageResponse.Result.MessageId]; }
- PinpointEmail.sendEmail
Callback function(err, data) { ... } data.MessageId
## 数据库设计
EmailRecords
- id
- createdAt
updatedAt
eventType
- eventTimestamp // 报告事件的时间,显示为以毫秒为单位的 Unix 时间。
- arrivalTimestamp // Amazon Pinpoint 收到事件的时间,显示为以毫秒为单位的 Unix 时间。
- eventVersion // 事件 JSON 架构的版本。
- application // 与事件关联的 Amazon Pinpoint 项目的相关信息。有关更多信息,请参阅应用程序表。
- app_id
- sdk
- client // 安装在设备上用于报告事件的应用程序客户端的相关信息。有关更多信息,请参阅客户端表。
- device // 报告事件的设备的相关信息。有关更多信息,请参阅设备表。在发送事务性消息时生成的事件中,此对象为空。
- session // 对于 SMS 事件,此对象为空。
- attributes // 与事件关联的属性。对于您的应用程序之一报告的事件,此对象包含由应用程序定义的自定义属性。对于在您发送活动时创建的事件,此对象包含与活动关联的属性。对于在您发送事务性消息时生成的事件,此对象包含与消息本身相关的信息。
- clientContext // 对于电子邮件事件,此对象包含一个 custom 对象,其中包含一个 legacy_identifier 属性。legacy_identifier 属性的值是发送消息的项目的 ID。
- facets // 有关消息的其他信息,如电子邮件标头。有关更多信息,请参阅分面表。
- email_channel
- mail_event
- mail
- "message_id": "0200000073rnbmd1-mbvdg3uo-q8ia-m3ku-ibd3-ms77kexample-000000",
- "message_send_timestamp": 1564618621380,
- "from_address": "sender@example.com",
- "destination": ["recipient@example.com"],
- "headers_truncated": false,
- "headers": []
- "common_headers": {}
- send
- delivery
- click
- open
- mail
- mail_event
- email_channel
- awsAccountId // 已用于发送消息的 AWS 账户的 ID。
enum EmailEvent { Send = '_email.send', // 对 Amazon SES 的调用已成功且 Amazon SES 将尝试发送电子邮件。 Delivered = '_email.delivered', // Amazon SES 已将电子邮件成功送达至收件人的邮件服务器。 Rejected = '_email.rejected', // Amazon SES 已接受电子邮件,确定它包含恶意软件,并拒绝它。Amazon SES 未尝试将电子邮件发送到收件人的邮件服务器。 HardBounce = '_email.hardbounce', // 一个永久问题阻止了 Amazon Pinpoint 传送消息。Amazon Pinpoint 不会尝试重新传送消息。 SoftBounce = '_email.softbounce', // 一个临时问题阻止了 Amazon Pinpoint 传送消息。Amazon Pinpoint 将在特定的时间长度之后尝试重新传输消息。此时间过后,如果消息仍无法送达,则视为硬退回。 Complaint = '_email.complaint', // 接收人收到了消息,然后向其电子邮件提供商报告该消息为垃圾邮件(例如,使用电子邮件客户端的“报告垃圾邮件”功能)。 Open = '_email.open', // 接收人收到并打开了消息。 Click = '_email.click', // 接收人收到了消息并单击了其中的链接。 Unsubscribe = '_email.unsubscribe', // 接收人收到了消息并单击了其中的取消订阅链接。 }
SMSRecords
- id
- createdAt
updatedAt
eventType
- eventTimestamp // 报告事件的时间,显示为以毫秒为单位的 Unix 时间。
- arrivalTimestamp // Amazon Pinpoint 收到事件的时间,显示为以毫秒为单位的 Unix 时间。
- eventVersion // 事件 JSON 架构的版本。
- application // 与事件关联的 Amazon Pinpoint 项目的相关信息。有关更多信息,请参阅应用程序表。
- app_id
- sdk
- client // 安装在设备上用于报告事件的应用程序客户端的相关信息。有关更多信息,请参阅客户端表。
- device // 报告事件的设备的相关信息。有关更多信息,请参阅设备表。在发送事务性消息时生成的事件中,此对象为空。
- session // 对于 SMS 事件,此对象为空。
- attributes // 与事件关联的属性。对于您的应用程序之一报告的事件,此对象包含由应用程序定义的自定义属性。对于在您发送活动时创建的事件,此对象包含与活动关联的属性。对于在您发送事务性消息时生成的事件,此对象包含与消息本身相关的信息。 "sender_request_id": "565d4425-4b3a-11e9-b0a5-example", "campaign_activity_id": "cbcfc3c5e3bd48a8ae2b9cb41example", "origination_phone_number": "+12065550142", "destination_phone_number": "+14255550199", "record_status": "DELIVERED", "iso_country_code": "US", "treatment_id": "0", "number_of_message_parts": "1", "message_id": "1111-2222-3333", "message_type": "Transactional", "campaign_id": "52dc44b35c4742c98c5935269example"
- metrics // 与事件关联的其他指标。有关更多信息,请参阅指标表。
- awsAccountId // 已用于发送消息的 AWS 账户的 ID。
enum SMSEvent { Buffered = '_SMS.BUFFERED', // 消息仍在传送给接收人的过程中。 Success = '_SMS.SUCCESS', // 消息已成功传送给接收人。 Failure = '_SMS.FAILURE', // Amazon Pinpoint 无法将消息传送给接收人。要了解有关阻止消息传送的错误的更多信息,请参阅 attributes.record_status。 OptOut = '_SMS.OPTOUT' // 客户收到消息并通过发送退订关键字(通常为“STOP”)来回复。 }
## 接口设计
mount() { // create database tables }
unmount() { // drop database tables }
createEmail()
sendEmail(to: [string], subject: sting, content: string) {}
createSMS()
sendSMS()
getEmailStatus()
getSMSStatus()
callbackForEventStream()
getEmailEvents()
getSMSEvents()
```