- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试在使用 AWS Node.js SDK 时自定义 header 。
似乎sendEmail API endpoint和 accompanying SDK method不支持自定义 Headers。
所以使用的适当方法是 sendRawEmail .
不幸的是,我找不到真正有助于撰写原始电子邮件的好信息或软件包。意味着发送纯文本和 html 格式,并根据 RFC 2822 和 RFC 5322 创建消息正文和 header 。
组成用 JavaScript 编写的原始主体的简单方法会是什么样子?
最佳答案
这是我想出的一个准系统功能,它只有 AWS Javascript SDK
作为依赖项。一开始我做错的一件事是对 RawMessage.Data
进行 Base 64 编码,但 AWS SDK
已经解决了这个问题。
空行 \n
也很重要。
const sendRawEmail = async () => {
// Set up from_name, from_email, to, subject, message_id, plain_text, html and configuration_set variables from database or manually
var date = new Date();
var boundary = `----=_Part${ Math.random().toString().substr( 2 ) }`;
var rawMessage = [
`From: "${ from_name }" <${ from_email }>`, // Can be just the email as well without <>
`To: ${ to }`,
`Subject: ${ subject }`,
`MIME-Version: 1.0`,
`Message-ID: <${ message_id }@eu-west-1.amazonses.com>`, // Will be replaced by SES
`Date: ${ formatDate( date ) }`, // Will be replaced by SES
`Return-Path: <${ message_id }@eu-west-1.amazonses.com>`, // Will be replaced by SES
`Content-Type: multipart/alternative; boundary="${ boundary }"`, // For sending both plaintext & html content
// ... you can add more headers here as decribed in https://docs.aws.amazon.com/ses/latest/DeveloperGuide/header-fields.html
`\n`,
`--${ boundary }`,
`Content-Type: text/plain; charset=UTF-8`,
`Content-Transfer-Encoding: 7bit`,
`\n`,
plain_text,
`--${ boundary }`,
`Content-Type: text/html; charset=UTF-8`,
`Content-Transfer-Encoding: 7bit`,
`\n`,
html,
`\n`,
`--${ boundary }--`
]
// Send the actual email
await ses.sendRawEmail( {
Destinations: [
to
],
RawMessage: {
Data: rawMessage.join( '\n' )
},
Source: from_email, // Must be verified within AWS SES
ConfigurationSetName: configuration_set, // optional AWS SES configuration set for open & click tracking
Tags: [
// ... optional email tags
]
} ).promise();
}
这些是格式化日期标题的实用方法。您也可以简单地使用 moment
库,例如 moment().format('ddd, DD MMM YYYY HH:MM:SS ZZ');
但它不会'这真的很重要,因为日期 header 无论如何都会被 AWS SES 覆盖。
// Outputs timezone offset in format ZZ
const getOffset = ( date ) => {
var offset = - date.getTimezoneOffset();
var offsetHours = Math.abs( Math.floor( offset / 60 ) );
var offsetMinutes = Math.abs( offset ) - offsetHours * 60;
var offsetSign = ( offset > 0 ) ? '+' : '-';
return offsetSign + ( '0' + offsetHours ).slice( -2 ) + ( '0' + offsetMinutes ).slice( -2 );
}
// Outputs two digit inputs with leading zero
const leadingZero = ( input ) => ( '0' + input ).slice( -2 );
// Formats date in ddd, DD MMM YYYY HH:MM:SS ZZ
const formatDate = ( date ) => {
var weekdays = [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun' ];
var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];
var weekday = weekdays[ date.getDay() ];
var day = leadingZero( date.getDate() );
var month = months[ date.getMonth() ];
var year = date.getFullYear();
var hour = leadingZero( date.getHours() );
var minute = leadingZero( date.getMinutes() );
var second = leadingZero( date.getSeconds() );
var offset = getOffset( date );
return `${ weekday }, ${ day } ${ month } ${ year } ${ hour }:${ minute }:${ second } ${ offset }`;
}
关于javascript - 如何为 Amazon SES sendRawEmail 创建邮件正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54212231/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
虽然 SES 仪表板显示了有关通过该服务发送的电子邮件的退回率的汇总统计信息,但我没有看到检索退回的单个地址的方法。这可能吗?我们的情况是,我们在某些电子邮件中设置的“发件人”地址不正确,并解析为我们
我正在使用 nodejs nodemailer 连接到 Amazon SES 电子邮件服务。这一切看起来很简单,但我不断收到错误消息: “我们计算的请求签名与您提供的签名不匹配。请检查您的 AWS s
在下面的代码中,我尝试了 2 种组合 用户(参见附图),密码 访问 ID 和访问 key 两者都给出了相同的错误。我在家庭网络的 eclipse 环境中运行了这段代码。 错误 Attempting t
我正在尝试制作一个可重用的 CloudFormation 模板,并且想要执行某种条件,如果环境参数为“test”(或“prod”以外的任何其他环境),则将 SES 电子邮件仅发送到 gmail帐户(即
我见过几个使用 Amazon SES 的 gem。但是,如果没有该 gem,我找不到亚马逊提供的任何 API 来构建服务。 如何在不使用 gem 的情况下完成 gem 的功能?这对我的应用非常重要,因
我在具有共享托管平台(不在 AWS 上)的网站上使用 AWS SES 当我使用 SMTP 发送电子邮件时,它运行良好。当我尝试调用和使用 API 时,没有发送电子邮件,也没有收到错误消息。 我想使用
我有一个 Amazon SES 连接设置,目前处于沙盒模式。 我有我的电子邮件地址,我使用真实的地址,但对于这篇文章,我们称之为 myemail@arealdomain.com .它已在 SES 中验
我们最近收到了一封来自亚马逊的电子邮件。 Hello, Amazon Web Services currently supports Amazon SES API requests that are
我是 Amazon SES 的新手,我发现有两种以编程方式发送电子邮件的方法: SES API ( http://docs.aws.amazon.com/ses/latest/DeveloperGui
因此,我设法创建了一个控制台应用程序,该应用程序引用以下链接通过SES发送电子邮件:https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send
我已经配置了Amazon SES,但是无法发送电子邮件。我收到未验证电子邮件的错误,但无法完成,因为该电子邮件在我拥有的另一个应用程序中运行正常。 这是错误: | Error com.amazonaw
我正在将.Net Core 1.2与Amazon SES(SimpleEmail)一起使用来发送电子邮件(原始电子邮件)。 以下是我们在.net Framework 4.5中使用的工作代码版本:
SES 不允许我进行身份验证。我可以在端口 25 上远程登录,但每当我在命令下方给出“AUTH LOGIN”时,连接就会丢失。 $ telnet.exe email-smtp.us-west-2.am
我已经改用 Amazon SES 从我们的 asp.net 系统发送我们的交易警报,我接到电话说人们收到了重复的电子邮件。 我已经确认我们的程序只向每个用户发送一次电子邮件。 我在第一封电子邮件发送后
是否可以回复我之前使用 AWS SES 发送给用户的电子邮件?我在文档中看不到任何可以实现这一点的内容。 所以我想: (1) 发送电子邮件至电子邮件地址 X (2) 回复来自 (1) 的电子邮件线程
我想知道从哪里开始设置每周个性化摘要以发送给我的用户(超过 20 万)。 它将提取特定于他们的内容,我们目前在带有 SQL 的 Windows EC2 实例上使用 SES 进行通知。 Windows
看来 Amazon SES 已开始支持接收电子邮件: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-cons
最近通过 Java Amazon SDK(v. 1.11.202),我将 1000 个 SendEmailRequests 排队到同一电子邮件地址。请求以 14/s 的速率排队,这是我的配额限制。没有
我们使用 aws 服务器,我们的应用程序通过亚马逊的简单电子邮件服务 (SES) 向客户发送电子邮件。 当收件人打开外出回复时,SES 将他们视为退回并在发送几次后阻止该电子邮件 ID。 这是 SES
我是一名优秀的程序员,十分优秀!