什么是Amazon Simple Email Service(SES 群发邮件)

Amazon Simple Email Service(Amazon SES)让您可以使用 Amazon SES API 或 SMTP 接口放心地联络到客户,而无需使用本地简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)电子邮件服务器。

目录

什么是SES

Amazon Simple Email Service(又称 SES 群发邮件)是一个电子邮件平台,为您提供一种简单、经济高效的方式,让您使用自己的电子邮件地址和域发送和接收电子邮件。

例如,您可以发送营销电子邮件(例如特别优惠)、交易电子邮件(例如订单确认)以及其他类型的通信(例如新闻通讯)。当您使用 Amazon SES 接收邮件时,您可以开发软件解决方案,例如电子邮件自动回复器、电子邮件取消订阅系统以及从传入电子邮件生成客户支持票证的应用程序。


为什么使用 SES

Amazon SES 是一家基于云的电子邮件服务提供商,可以集成到任何应用程序中,以实现大批量电子邮件自动化。无论您是使用电子邮件软件发送交易电子邮件、营销电子邮件还是时事通讯电子邮件,都只需按实际用量付费。Amazon SES 是一款电子邮件工具,还支持包括专用、共享或自有 IP 地址的部署。关于发件人统计数据的报告和电子邮件送达率工具可帮助企业确保每封电子邮件都有效送达。


解决难点

  • 对于企业来说,构建大规模电子邮件解决方案通常是一项复杂且成本高昂的挑战。您必须应对基础设施挑战,例如:
    • 电子邮件服务器管理
    • 网络配置
    • IP 地址部署认证等。
  • 第三方电子邮件解决方案需要:
    • 合同和价格谈判
    • 大量的前期成本。
  • Amazon SES 消除了这些挑战,并使您能够受益于 Amazon.com 服务其自身的大规模客户群而构建的多年经验和先进的电子邮件基础设施

应用场景

  • 自动发送事务型邮件:通过自动发送电子邮件(如购买或发货通知、订单状态更新和策略变更通知)来使您的客户随时掌握最新信息。
  • 在全球范围内传送营销电子邮件:通过新闻通讯、特别优惠和吸引受众的内容,向全球各地的客户介绍产品和服务。
  • 及时向客户发送通知:及时向客户发送有关其与您的产品和服务之间交互的通知,包括每日提醒、每周使用报告和新闻通讯。
  • 批量发送电子邮件通信:向大型团体传送消息(包括通知和公告),并使用配置集跟踪结果。

工作原理

下面介绍以使用 SES 发送电子邮件时的工作原理为例:

  1. 电子邮件发件人的客户端应用程序向 SES 发出请求,将电子邮件发送给一个或多个收件人。
  2. 如果请求有效,SES 会接受该电子邮件。
  3. SES 通过互联网将消息发送至收件人的接收者。一旦消息传递到 SES,通常会立即发送,第一次传递尝试通常会在几毫秒内发生。
  4. 此时,就有不同的可能性。例如:
    a. ISP 成功地将邮件传送到收件人的收件箱。
    b. 收件人的电子邮件地址不存在,因此 ISP 向 SES 发送退回通知。然后,SES 将通知转发给发件人。
    c. 收件人收到该邮件,但认为它是垃圾邮件并向 ISP 进行投诉。ISP 与 SES 建立了反馈循环,将投诉发送给 SES,然后 SES 将其转发给发件人。

Amazon SES 现在支持的功能

邮件发送人配置选项

Amazon SES 提供了多种发送电子邮件的方式,包括 Amazon SES 控制台、简单邮件传输协议(SMTP)接口和 Amazon SES API。

提高收件箱送达率

送达率:确保电子邮件到达收件箱而不是垃圾邮件,是成功的电子邮件策略的核心要素。

SES 提供对发件人电子邮件性能的洞察,就如何提高送达率提出建议,甚至可以自动为发件人实施电子邮件送达率改进。SES 具有三个核心可交付性组件:数据分析、建议更改和自动实施

  • 分析电子邮件送达率

    SES 的送达率数据分析可以帮助电子邮件发件人了解他们的送达率。 在 SES 控制台的单个界面中查看有关发送和送达数据的概览报告,例如跳出率、打开次数和点击次数。您可以按照 ISP、发件人身份和配置集查看这些指标的明细,以及您发送的每封电子邮件的送达和互动情况。

  • 查看电子邮件送达率建议

    SES 可以通知发件人电子邮件送达率问题并提供可操作的建议以帮助提高收件箱送达率,例如审查 SPF、DKIM 和 DMARC 等电子邮件身份验证配置。如果识别出电子邮件声誉降级或改进机会,发件人将持续可见。

  • 自动提高电子邮件送达率

    发件人可以选择允许 SES 自动实施电子邮件送达率建议,例如优化电子邮件送达模式。一旦 SES 检测到改进的机会,系统将实施更改,而无需监控或手动调整。

灵活的部署选项

  • 共享 IP 地址
  • 专用 IP 地址
  • 自带 IP 地址

发件人身份管理和安全性

Amazon SES 支持所有行业标准的身份验证机制,包括域名密钥识别邮件 (DKIM)、发件人策略框架 (SPF)、基于域的邮件身份验证、报告和一致性 (DMARC)。

发送统计信息

Amazon SES 提供了数种用于监控电子邮件发送活动的方式,帮助调整电子邮件发送策略。Amazon SES 可以捕获有关整个电子邮件回复管道的信息,包括发送和送达的电子邮件数、电子邮件被打开、单击、退回的次数及其遭到投诉的次数以及被拒收的次数。

声誉控制面板

Amazon SES 控制台包含一个声誉控制面板,可以使用它来跟踪可能影响电子邮件发送的问题。

电子邮件接收

在使用 Amazon SES 接收传入电子邮件时,可以完全掌控要接收哪些电子邮件,以及接收电子邮件后要如何处理。

邮箱模拟器

借助 Amazon SES 邮箱模拟器,可以轻松测试应用程序如何处理各种场景 (如退回邮件或投诉),而不会影响您的发件人。

--

代码示例-使用 AWS 开发工具包通过 Amazon SES 发送电子邮件

java 复制代码
    public static void send(SesClient client,
                            String sender,
                            String recipient,
                            String subject,
                            String bodyHTML
    ) throws MessagingException {

        Destination destination = Destination.builder()
            .toAddresses(recipient)
            .build();

        Content content = Content.builder()
            .data(bodyHTML)
            .build();

        Content sub = Content.builder()
            .data(subject)
            .build();

        Body body = Body.builder()
            .html(content)
            .build();

        Message msg = Message.builder()
            .subject(sub)
            .body(body)
            .build();

        SendEmailRequest emailRequest = SendEmailRequest.builder()
            .destination(destination)
            .message(msg)
            .source(sender)
            .build();

        try {
            System.out.println("Attempting to send an email through Amazon SES " + "using the AWS SDK for Java...");
            client.sendEmail(emailRequest);

        } catch (SesException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }

    public static void sendemailAttachment(SesClient client,
                            String sender,
                            String recipient,
                            String subject,
                            String bodyText,
                            String bodyHTML,
                            String fileLocation) throws AddressException, MessagingException, IOException {

        java.io.File theFile = new java.io.File(fileLocation);
        byte[] fileContent = Files.readAllBytes(theFile.toPath());

        Session session = Session.getDefaultInstance(new Properties());

        // Create a new MimeMessage object.
        MimeMessage message = new MimeMessage(session);

        // Add subject, from and to lines.
        message.setSubject(subject, "UTF-8");
        message.setFrom(new InternetAddress(sender));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));

        // Create a multipart/alternative child container.
        MimeMultipart msgBody = new MimeMultipart("alternative");

        // Create a wrapper for the HTML and text parts.
        MimeBodyPart wrap = new MimeBodyPart();

        // Define the text part.
        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setContent(bodyText, "text/plain; charset=UTF-8");

        // Define the HTML part.
        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(bodyHTML, "text/html; charset=UTF-8");

        // Add the text and HTML parts to the child container.
        msgBody.addBodyPart(textPart);
        msgBody.addBodyPart(htmlPart);

        // Add the child container to the wrapper object.
        wrap.setContent(msgBody);

        // Create a multipart/mixed parent container.
        MimeMultipart msg = new MimeMultipart("mixed");

        // Add the parent container to the message.
        message.setContent(msg);
        msg.addBodyPart(wrap);

        // Define the attachment.
        MimeBodyPart att = new MimeBodyPart();
        DataSource fds = new ByteArrayDataSource(fileContent, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        att.setDataHandler(new DataHandler(fds));

        String reportName = "WorkReport.xls";
        att.setFileName(reportName);

        // Add the attachment to the message.
        msg.addBodyPart(att);

        try {
            System.out.println("Attempting to send an email through Amazon SES " + "using the AWS SDK for Java...");

            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            message.writeTo(outputStream);

            ByteBuffer buf = ByteBuffer.wrap(outputStream.toByteArray());

            byte[] arr = new byte[buf.remaining()];
            buf.get(arr);

            SdkBytes data = SdkBytes.fromByteArray(arr);
            RawMessage rawMessage = RawMessage.builder()
                .data(data)
                .build();

            SendRawEmailRequest rawEmailRequest = SendRawEmailRequest.builder()
                .rawMessage(rawMessage)
                .build();

            client.sendRawEmail(rawEmailRequest);

        } catch (SesException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        System.out.println("Email sent using SesClient with attachment");
     }

限时-SES 提供灵活的免费套餐

作为 AWS Free Tier 的一部分,SES 提供灵活的免费套餐,使您可以免费试用所需的 SES 电子邮件功能。在开始使用 SES 后的 12 个月内,免费套餐客户每月最多可免费接收 3000 条消息。

以下 SES 产品的消息费用有资格享受 SES 免费套餐:

  • 出站电子邮件
  • 入站电子邮件
  • 虚拟可交付性管理器出站电子邮件处理

附录

亚马逊云服务免费体验中心
将 Amazon SES 与 AWS 开发工具包结合使用
通过 AWS 管理控制台开始使用

相关推荐
九河云27 分钟前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
神一样的老师34 分钟前
利用亚马逊AWS IoT核心和MQTT进行数据采集的综合指南
云计算·aws
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei2 小时前
java的类加载机制的学习
java·学习
励志成为嵌入式工程师2 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml43 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍