使用 AWS SES 发送电子邮件:综合指南

使用 aws ses 发送电子邮件:综合指南

aws simple email service (ses) 是一种功能强大、经济高效的解决方案,可以帮助您安全地发送电子邮件,无论是用于交易消息、营销活动还是自动通知。

在这篇博文中,我们将探讨如何使用 aws ses 发送电子邮件,涵盖各种用例,例如发送 html 模板、附件,甚至日历事件。我们将通过实际示例帮助您快速入门。

目录

什么是 aws ses?设置 aws ses发送简单的电子邮件发送 html 电子邮件发送带附件的电子邮件发送日历邀请最佳实践结论

什么是 aws ses?

aws simple email service (ses) 是一项基于云的电子邮件发送服务,旨在帮助数字营销人员和应用程序开发人员发送营销、通知和交易电子邮件。对于各种规模的企业来说,这是一项可靠、可扩展且经济高效的服务。

主要特点:

可扩展性:轻松处理大量电子邮件。交付率: 由于 aws 的声誉,交付率很高。成本效益:即用即付定价模式。安全性:支持dkim和spf等身份验证机制。

设置 aws ses

在我们深入发送电子邮件之前,让我们为您的账户设置 aws ses。

第 1 步:验证您的电子邮件地址或域名

aws ses 要求您验证您计划使用的电子邮件地址或域。

验证电子邮件地址:转到 aws ses 控制台。导航到身份管理下的电子邮件地址。点击验证新电子邮件地址。输入您的电子邮件地址,然后单击验证此电子邮件地址。检查您的收件箱并单击来自 aws 的电子邮件中的验证链接。验证域名:导航到身份管理下的域。点击验证新域名。输入您的域名。aws 将提供 dns 记录。将这些添加到您域的 dns 设置中。

第 2 步:请求生产访问权限

默认情况下,新的 aws 账户位于沙盒环境中,这限制了电子邮件发送功能。

前往ses发送限制页面。点击请求提高发送限额。填写退出沙箱的申请表。

步骤 3:设置 aws 凭证

您需要 aws 访问密钥才能以编程方式与 ses 交互。

转到 aws iam 控制台。使用编程访问创建新用户。附加 amazonsesfullaccess 策略。保存您的访问密钥id和秘密访问密钥。

发送简单的电子邮件

我们首先使用适用于 node.js 的 aws 开发工具包发送一封简单的纯文本电子邮件。

先决条件

node.js 安装在您的计算机上。已安装适用于 node.js 的 aws 开发工具包 (aws-sdk)。

代码示例

const aws = require('aws-sdk');// configure aws sdkaws.config.update({  accesskeyid: 'your_access_key_id',  secretaccesskey: 'your_secret_access_key',  region: 'us-east-1', // replace with your ses region});const ses = new aws.ses();const params = {  source: 'sender@example.com',  destination: {    toaddresses: ['recipient@example.com'],  },  message: {    subject: {      data: 'test email from aws ses',    },    body: {      text: {        data: 'hello, this is a test email sent using aws ses!',      },    },  },};ses.sendemail(params, (err, data) => {  if (err) {    console.error('error sending email', err);  } else {    console.log('email sent successfully', data);  }});

说明:

来源:您发送邮件时所使用的经过验证的电子邮件地址。目的地:收件人的电子邮件地址。消息:包含电子邮件的主题和正文。

发送 html 电子邮件

现在,让我们发送一封包含 html 内容的电子邮件,使其更具视觉吸引力。

代码示例

const params = {  source: 'sender@example.com',  destination: {    toaddresses: ['recipient@example.com'],  },  message: {    subject: {      data: 'welcome to our service!',    },    body: {      html: {        data: `                                    

welcome!

we're glad to have you on board.

`, }, }, },};ses.sendemail(params, (err, data) => { if (err) { console.error('error sending html email', err); } else { console.log('html email sent successfully', data); }});

温馨提示:

您可以内联包含 css 样式或使用基本样式来确保跨电子邮件客户端的兼容性。始终包含纯文本版本作为后备。

发送带附件的电子邮件

要发送带有附件的电子邮件,我们将使用 sendrawemail 方法而不是 sendemail。

代码示例

const fs = require('fs');const path = require('path');const aws = require('aws-sdk');const ses = new aws.ses();// read the attachment fileconst filepath = path.join(__dirname, 'attachment.pdf');const filecontent = fs.readfilesync(filepath);// define the email parametersconst params = {  rawmessage: {    data: createrawemail(),  },};function createrawemail() {  const boundary = '----=_part_0_123456789.123456789';  let rawemail = [    `from: sender@example.com`,    `to: recipient@example.com`,    `subject: email with attachment`,    `mime-version: 1.0`,    `content-type: multipart/mixed; boundary="${boundary}"`,    ``,    `--${boundary}`,    `content-type: text/plain; charset=utf-8`,    `content-transfer-encoding: 7bit`,    ``,    `hello, please find the attached document.`,    `--${boundary}`,    `content-type: application/pdf; name="attachment.pdf"`,    `content-description: attachment.pdf`,    `content-disposition: attachment; filename="attachment.pdf";`,    `content-transfer-encoding: base64`,    ``,    filecontent.tostring('base64'),    `--${boundary}--`,  ].join('n');  return rawemail;}ses.sendrawemail(params, (err, data) => {  if (err) {    console.error('error sending email with attachment', err);  } else {    console.log('email with attachment sent successfully', data);  }});

说明:

多部分 mime 消息: 我们构建带有 mime 边界的原始电子邮件以包含附件。base64 编码: 附件必须采用 base64 编码。内容标头:电子邮件客户端需要正确的标头才能正确解释附件。

发送日历邀请

要发送日历事件,我们将包含一个 .ics 文件作为附件。

代码示例

function createCalendarEvent() {  const event = [    'BEGIN:VCALENDAR',    'VERSION:2.0',    'BEGIN:VEVENT',    'DTSTAMP:20231016T090000Z',    'DTSTART:20231020T100000Z',    'DTEND:20231020T110000Z',    'SUMMARY:Meeting Invitation',    'DESCRIPTION:Discuss project updates',    'LOCATION:Conference Room',    'END:VEVENT',    'END:VCALENDAR',  ].join('n');  return Buffer.from(event).toString('base64');}function createRawEmail() {  const boundary = '----=_Part_0_123456789.123456789';  let rawEmail = [    `From: sender@example.com`,    `To: recipient@example.com`,    `Subject: Meeting Invitation`,    `MIME-Version: 1.0`,    `Content-Type: multipart/mixed; boundary="${boundary}"`,    ``,    `--${boundary}`,    `Content-Type: text/plain; charset=UTF-8`,    `Content-Transfer-Encoding: 7bit`,    ``,    `Hello, you're invited to a meeting.`,    `--${boundary}`,    `Content-Type: text/calendar; method=REQUEST; name="invite.ics"`,    `Content-Transfer-Encoding: base64`,    `Content-Disposition: attachment; filename="invite.ics"`,    ``,    createCalendarEvent(),    `--${boundary}--`,  ].join('n');  return rawEmail;}ses.sendRawEmail(params, (err, data) => {  if (err) {    console.error('Error sending calendar invite', err);  } else {    console.log('Calendar invite sent successfully', data);  }});

说明:

日历事件格式:我们使用 icalendar 格式创建一个 .ics 文件内容。method=request: 表示这是会议邀请。正确的标题:确保日历文件的内容类型和内容处置正确。

最佳实践

错误处理:始终在您的应用程序中包含强大的错误处理。电子邮件验证:发送前确保电子邮件地址有效。限制: 请注意您的 ses 发送限制以避免限制。取消订阅链接:在营销电子邮件中包含取消订阅选项以遵守法规。监控:使用 aws cloudwatch 监控您的电子邮件发送活动。安全性:保护您的 aws 凭证并尽可能使用 iam 角色。

结论

aws ses 是一项多功能服务,可以处理各种电子邮件发送需求。无论您是发送简单的通知、包含丰富 html 内容的营销电子邮件,还是包含附件和日历事件的复杂消息,aws ses 都能满足您的需求。

通过遵循本指南,您现在应该充分了解如何:

为您的账户设置 aws ses。发送纯文本和 html 电子邮件。在电子邮件中包含附件和日历邀请。

感谢您的阅读!如果您有任何问题或建议要分享,请随时在下面发表评论。快乐编码!

以上就是使用 AWS SES 发送电子邮件:综合指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1493420.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
在nodejs中如何解决这个问题呢?
上一篇 2025年12月19日 15:40:23
使用 Javascript 的心形图案代码
下一篇 2025年12月19日 15:40:38

相关推荐

  • 程序员如何安装Sublime_高效代码编辑器安装配置指南

    程序员如何安装Sublime_高效代码编辑器安装配置指南程序员如何安装Sublime_高效代码编辑器安装配置指南程序员如何安装Sublime_高效代码编辑器安装配置指南程序员如何安装Sublime_高效代码编辑器安装配置指南

    Sublime Text是轻量高效的跨平台代码编辑器,支持多语言和插件扩展。首先从官网下载安装,可选激活去除提示;接着通过控制台安装Package Control插件管理工具;再使用命令面板安装Emmet、BracketHighlighter等常用插件;最后在用户设置中配置tab大小、换行、高亮等个…

    2026年9月28日 • 用户投稿
    100
  • JNA高级教程:如何高效映射C语言嵌套结构体与联合体

    JNA高级教程:如何高效映射C语言嵌套结构体与联合体JNA高级教程:如何高效映射C语言嵌套结构体与联合体JNA高级教程:如何高效映射C语言嵌套结构体与联合体JNA高级教程:如何高效映射C语言嵌套结构体与联合体

    本教程深入探讨了JNA在Java与C语言之间进行复杂数据类型映射的机制,特别是针对包含嵌套结构体和联合体(Union)的场景。文章通过分析一个实际的错误案例,详细阐述了JNA对Java类继承Structure或Union的严格要求,并提供了两种核心解决方案:一是直接构建与C语言定义精确对应的JNA映…

    2026年9月28日 • 用户投稿
    100
  • JNA高级教程:深入理解原生结构体与联合体映射

    JNA高级教程:深入理解原生结构体与联合体映射JNA高级教程:深入理解原生结构体与联合体映射JNA高级教程:深入理解原生结构体与联合体映射JNA高级教程:深入理解原生结构体与联合体映射

    本教程详细探讨了JNA在与原生库交互时,如何正确映射包含嵌套结构体或联合体的复杂数据类型。文章首先分析了IllegalArgumentException的常见原因——非Structure类型字段导致JNA无法确定原生大小,随后提供了两种解决方案:一是直接通过JNA的Structure和Union类精…

    2026年9月28日 • 用户投稿
    100
  • sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法

    sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法

    安装插件并配置可实现Sublime Text保存时自动格式化代码,提升代码可读性与一致性。首先安装Package Control包管理器,通过控制台执行指定代码完成安装;重启后使用命令面板(Ctrl+Shift+P)调出Package Control: Install Package,搜索并安装所需…

    2026年9月28日 • 用户投稿
    900
  • sublime怎么安装markdown预览插件_Sublime Markdown实时预览插件安装教程

    sublime怎么安装markdown预览插件_Sublime Markdown实时预览插件安装教程sublime怎么安装markdown预览插件_Sublime Markdown实时预览插件安装教程sublime怎么安装markdown预览插件_Sublime Markdown实时预览插件安装教程sublime怎么安装markdown预览插件_Sublime Markdown实时预览插件安装教程

    最直接的方式是通过Package Control安装MarkdownPreview或OmniMarkupPreviewer插件,先确保安装Package Control,再通过命令面板搜索并安装插件,最后使用快捷命令在浏览器中实时预览Markdown渲染效果。 在Sublime Text里安装Mar…

    2026年9月28日 • 用户投稿
    100
  • 将Java或Groovy中的字符串转换为JSON对象

    将Java或Groovy中的字符串转换为JSON对象将Java或Groovy中的字符串转换为JSON对象将Java或Groovy中的字符串转换为JSON对象将Java或Groovy中的字符串转换为JSON对象

    将Java或Groovy中的字符串转换为JSON对象,需要根据实际情况进行分析。如果字符串是标准的JSON格式,可以直接使用JSON解析库进行转换。但如果字符串不是标准的JSON格式,则需要自定义解析器。 理解JSON格式 首先,我们需要明确标准的JSON格式。一个JSON对象是由键值对组成的,键和…

    2026年9月28日 • 用户投稿
    100
  • sublime代码提示不出来怎么办_解决Sublime代码自动补全失效问题

    sublime代码提示不出来怎么办_解决Sublime代码自动补全失效问题sublime代码提示不出来怎么办_解决Sublime代码自动补全失效问题sublime代码提示不出来怎么办_解决Sublime代码自动补全失效问题sublime代码提示不出来怎么办_解决Sublime代码自动补全失效问题

    代码提示失效多因插件未安装、语法识别错误或auto_complete被关闭。检查设置中是否启用auto_complete,安装Emmet、Anaconda等语言插件,确认文件语法正确,必要时清除缓存重建索引,可恢复补全功能。 Sublime Text 代码提示(自动补全)失效是不少用户在开发过程中遇…

    2026年9月28日 • 用户投稿
    500
  • 前端验证后调用Servlet的正确方法

    前端验证后调用Servlet的正确方法前端验证后调用Servlet的正确方法前端验证后调用Servlet的正确方法前端验证后调用Servlet的正确方法

    本文旨在解决在前端JavaScript验证后如何正确调用Servlet的问题。通过分析常见的错误原因,例如表单提交事件的阻止和页面重载,以及Servlet中HTTP方法的使用,提供了一种清晰的解决方案,确保在前端验证通过后,能够成功地向Servlet发送请求并处理用户登录。 在Web开发中,经常需要…

    2026年9月28日 • 用户投稿
    300
  • linux怎么进入mysql

    linux怎么进入mysqllinux怎么进入mysqllinux怎么进入mysqllinux怎么进入mysql

    要进入 MySQL 命令行界面,请遵循以下步骤:打开终端窗口。输入 MySQL 命令:mysql -u 用户名 -p。输入密码。连接成功后,输入 exit 退出 MySQL 命令行界面。 如何进入 MySQL 命令行界面 要进入 MySQL 命令行界面,您可以使用以下步骤: 打开终端窗口 在 Lin…

    2026年9月28日 • 用户投稿
    100
  • 使用 JavaScript 验证后调用 Servlet 的正确方法

    使用 JavaScript 验证后调用 Servlet 的正确方法使用 JavaScript 验证后调用 Servlet 的正确方法使用 JavaScript 验证后调用 Servlet 的正确方法使用 JavaScript 验证后调用 Servlet 的正确方法

    本文档旨在指导开发者如何在 JavaScript 验证客户端输入后,正确地调用 Servlet 来处理表单数据。我们将重点关注如何避免常见的 HTTP 405 错误,并提供清晰的代码示例和最佳实践,确保数据安全可靠地传输到服务器。 在 Web 开发中,客户端验证通常用于在数据提交到服务器之前检查其有…

    2026年9月28日 • 用户投稿
    200
  • 使用 Java 泛型实现 CSV 到对象的转换器

    使用 Java 泛型实现 CSV 到对象的转换器使用 Java 泛型实现 CSV 到对象的转换器使用 Java 泛型实现 CSV 到对象的转换器使用 Java 泛型实现 CSV 到对象的转换器

    本文将介绍如何使用 Java 泛型创建一个通用的 CSV 到对象的转换器。通过泛型,我们可以避免为每种需要转换的 Java 类编写重复的代码,从而提高代码的可重用性和可维护性。文章将提供代码示例,并讨论一些关于代码设计和现有 CSV 解析库的建议。 泛型 CSV 工具类 使用 Java 泛型可以创建…

    2026年9月28日 • 用户投稿
    100
  • sublime怎么使用多光标_Sublime Text多光标编辑高效操作技巧

    sublime怎么使用多光标_Sublime Text多光标编辑高效操作技巧sublime怎么使用多光标_Sublime Text多光标编辑高效操作技巧sublime怎么使用多光标_Sublime Text多光标编辑高效操作技巧sublime怎么使用多光标_Sublime Text多光标编辑高效操作技巧

    Sublime Text 的多光标功能是提升编辑效率的核心工具之一。通过合理使用,可以同时在多个位置进行输入、修改或选择,大幅减少重复操作。 1. 快速添加多个光标 想要同时编辑多个地方,关键是快速在目标位置创建光标: 按住 Ctrl(Cmd)点击**:在不同位置点击鼠标左键,每次点击都会增加一个光…

    2026年9月28日 • 用户投稿
    100
  • VSCode如何设置代码行高亮 VSCode行高亮功能的个性化配置

    vscode中设置代码行高亮的核心是配置editor.renderlinehighlight,可选值为none、line、gutter、all,推荐在settings.json中设置为”line”或”all”以高亮当前行或行号区域;2. 若高亮颜色过于…

    2026年9月28日
    500
  • 并发编程中Future对象使用不当及解决方案

    并发编程中Future对象使用不当及解决方案并发编程中Future对象使用不当及解决方案并发编程中Future对象使用不当及解决方案并发编程中Future对象使用不当及解决方案

    本文针对Java并发编程中常见的set<int, Future> is not applicable to arguments (int,int)错误,深入剖析了其产生的原因,即试图将整型值直接赋值给存储Future对象的集合。文章将详细阐述Future对象的特性,并提供正确的解决方案,…

    2026年9月28日 • 用户投稿
    100
  • sublime怎么安装less或sass的编译插件_Sublime Less及Sass自动编译插件安装配置

    sublime怎么安装less或sass的编译插件_Sublime Less及Sass自动编译插件安装配置sublime怎么安装less或sass的编译插件_Sublime Less及Sass自动编译插件安装配置sublime怎么安装less或sass的编译插件_Sublime Less及Sass自动编译插件安装配置sublime怎么安装less或sass的编译插件_Sublime Less及Sass自动编译插件安装配置

    Sublime Text中Less/Sass编译插件的核心优势在于实现自动编译,提升开发效率。通过Package Control安装如Less2Css或SassBuild等插件,可在保存文件时自动将Less或Sass代码转换为CSS,无需手动执行命令行编译。其主要优势包括:即时反馈,修改后保存即生成…

    2026年9月27日 • 用户投稿
    100
  • Excel批量转换日期格式技巧

    Excel批量转换日期格式技巧Excel批量转换日期格式技巧Excel批量转换日期格式技巧Excel批量转换日期格式技巧

    1、 null 2、 选取需要调整格式的日期内容。 3、 使用鼠标选中需转换格式的日期区域,支持多区域同时选择。 4、 弹出列分割设置界面。 5、 点击菜单栏中的“数据”选项,选择“分列”,启动文本分列向导窗口。 6、 设置分列方式为固定宽度模式。 7、 勾选“固定宽度”单选按钮,然后点击“下一步”…

    2026年9月27日 • 用户投稿
    100
  • 解决Spring Boot与React应用在AWS部署中CORS错误的终极指南

    解决Spring Boot与React应用在AWS部署中CORS错误的终极指南解决Spring Boot与React应用在AWS部署中CORS错误的终极指南解决Spring Boot与React应用在AWS部署中CORS错误的终极指南解决Spring Boot与React应用在AWS部署中CORS错误的终极指南

    本文旨在解决在Spring Boot后端(AWS EC2)和React前端(AWS S3)部署时,即使服务器端已配置宽松的CORS策略,仍出现跨域资源共享(CORS)错误的问题。我们将深入探讨常见误区,并提供一个将CORS配置与Spring Security有效整合的专业解决方案,同时强调处理wit…

    2026年9月27日 • 用户投稿
    200
  • 详解:如何将抖音订单接口接入到小程序上

    详解:如何将抖音订单接口接入到小程序上详解:如何将抖音订单接口接入到小程序上详解:如何将抖音订单接口接入到小程序上详解:如何将抖音订单接口接入到小程序上

    前言 作为全球领先的短视频平台,抖音拥有庞大的用户群体和活跃的电商生态。与此同时,小程序凭借其轻便、即用即走的特性,成为移动应用的重要形态之一。本文将深入讲解如何将抖音的订单接口成功接入小程序,助力开发者融合两大平台优势,提升服务体验与商业转化能力。 步骤一:理解抖音订单接口与小程序基础 在实际接入…

    2026年9月27日 • 用户投稿
    100
  • Stripe Webhook签名验证错误解析与中间件顺序优化

    Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化

    Stripe Webhook签名验证时出现”Payload must be provided as a string or a Buffer”错误,通常是由于Express应用中全局express.json()中间件过早解析了原始请求体。本文将深入解析此问题,并提供通过调整中…

    2026年9月27日 • 用户投稿
    100
  • HTML表单动态必填字段:基于其他字段内容的条件校验

    本文将指导您如何使用JavaScript实现HTML表单中字段的条件必填校验。当一个字段(如“姓名”)有值时,另一个字段(如“位置”)才变为必填项,从而提升用户体验和数据准确性。教程将提供详细的HTML和JavaScript代码示例,并解释其工作原理,确保您能轻松掌握这种实用的前端验证技术。 在构建…

    2026年9月27日
    200

发表回复

登录后才能评论
关注微信