ubuntu使用postfix和AWS-SES发送邮件

在日常开发中,邮件发送是个比较常见的场景。因此出现了很多相关的软件和服务,各大云厂商也推出自己的邮件服务。今天笔者就像大家介绍一种常见的组合,AWS的邮件服务 SES 与邮件服务器 postfix 的配置和使用方法。

概述

  • 什么是 AWS-SES

Amazon Simple Email Service (SES) 是一种经济高效、灵活且可扩展的电子邮件服务,使开发人员能够从任何应用程序中发送电子邮件。 您可以快速配置Amazon SES 以支持多种电子邮件使用案例,包括交易、营销或群发电子邮件通信。

  • 什么是 postfix

Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的。
它是为了改良 sendmail 产生的,同时它兼容 sendmail,是比较常用的一种邮件服务器。

开通Amazon Simple Email Service (SES)服务

  • 创建一个 identity

ubuntu使用postfix和AWS-SES发送邮件

此处我们为了演示方便,使用 Email address方式来验证。按下图填入后续要发送邮件的邮箱,随后 AWS 会给对应邮箱发一个确认验证的邮件,点击一下邮件连接即可表示确认授权。

ubuntu使用postfix和AWS-SES发送邮件
  • 创建凭证

选择 Account dashboard,此处的 SMTP endpoint 就是我们的邮件服务器地址,后面配置邮件服务器的时候需要使用。

ubuntu使用postfix和AWS-SES发送邮件

点击创建凭证,创建完成后,新页面上会有一个下载按钮。请务必及时下载凭证文件。

[En]

Click to create the voucher, and after it is created, there will be a download button on the new page. Be sure to download the voucher file in time.

凭证文件里有 Smtp Username 和 Smtp Password,后面配置 postfix 邮件服务器的时候需要用到。

ubuntu使用postfix和AWS-SES发送邮件
  • 测试邮件发送

使用 AWS 自带的功能发送一下测试邮件,查看是否成功。

ubuntu使用postfix和AWS-SES发送邮件
  • 其他说明

SES 的验证方式支持单个邮箱验证和 domain 验证。本文中笔者为了演示简单,采用了单个邮箱验证,如果实际使用中,邮件发送者就是固定的几个邮箱,采用该方法就比较简单。若是邮件发送者比较多,不固定,每个邮箱验证一次不太现实,就可以采用 domain 验证的方式,由域名管理员来配合验证即可,具体的使用 dimain 方式验证的方法,可以参考 aws 官网文档,添加对应的 dns 记录即可。

至此, SES 服务已经初步开通完毕,下面我们来看下 postfix 的相关配置。

EC2 安装 postfix 并配置 SES 发送邮件

笔者的环境是 ubuntu 20.04,其他版本的 ubuntu 方法基本类似。

shell> cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
  • 安装 postfix 邮件服务

使用以下命令进行安装,在安装过程中直接选择默认配置进行确认,然后我们将单独修改配置。

[En]

Use the following command to install, and directly select the default configuration in the middle of the installation process to confirm it, and then we will modify the configuration separately.

sudo apt-get install mailutils -y

安装完成之后,在 AWS 的 EC2 上是无法直接使用 mail 命令发邮件的,需要配置邮件服务器。
此处我们以 AWS 的 SES 服务为例,配合 postfix 进行邮件发送。

  • 修改 postfix 配置
sudo postconf -e "relayhost = [email-smtp.us-west-2.amazonaws.com]:587" \
"smtp_sasl_auth_enable = yes" \
"smtp_sasl_security_options = noanonymous" \
"smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
"smtp_use_tls = yes" \
"smtp_tls_security_level = encrypt" \
"smtp_tls_note_starttls_offer = yes"

sudo postconf -e "smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt"

通过上述命令修改 postfix 的配置,其实修改的就是 /etc/postfix/main.cf 文件,也可以手动使用 vim 等修改,为了保持格式,直接使用自带的 postconf 命令修改即可。
注意:上述命令中的 email-smtp.us-west-2.amazonaws.com根据实际情况换成你自己开通的 SES 服务的地址,上文 SES 开通部分有介绍过。

  • 填写账号文件
vim /etc/postfix/sasl_passwd
输入如下内容
[email-smtp.us-west-2.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD

email-smtp.us-west-2.amazonaws.com:换成你自己的 SES 服务地址
SMTPUSERNAME:SMTP用户名,上文 SES 开通部分有介绍过
SMTPPASSWORD:SMTP密码,同上

  • 编码账号文件和修改权限
sudo postmap hash:/etc/postfix/sasl_passwd

sudo chown root:root /etc/postfix/sasl_passwd
sudo chown root:root /etc/postfix/sasl_passwd.db
sudo chmod 0600 /etc/postfix/sasl_passwd
sudo chmod 0600 /etc/postfix/sasl_passwd.db
  • 重启 postfix 服务
systemctl reload postfix
  • 测试邮件发送并查看日志
echo test | mail -s "test message" -a "From: sender@example.com" receiver@example.com

tail -f /var/log/mail.log

注意,此处的发送者和收件者邮件需要在 AWS 上进行验证,否则发送邮件会失败。验证方式见前面的 AWS开通 SES 服务部分。

如果 SES 是在 sandbox 环境中,则发送者 sender@example.com和 收件人 receiver@example.com都需要在 AWS 上进行验证。如果是在 production 环境中,则只需要发送者邮件验证通过即可。

ubuntu使用postfix和AWS-SES发送邮件
  • 其他说明

若按照如上配置方式,邮件还是发送失败,可以查看机器上的日志,如 /var/log/mail.log。还可以检查安全组,看是否是邮件相关端口未开放。

参考文档:https://docs.aws.amazon.com/ses/latest/dg/postfix.html

更多技术文章,请关注我的个人博客 www.immaxfang.com 和小公众号 Max的学习札记

Original: https://www.cnblogs.com/immaxfang/p/16366073.html
Author: immaxfang
Title: ubuntu使用postfix和AWS-SES发送邮件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523391/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Centos7上安装docker

    Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认…

    大数据 2023年5月29日
    064
  • 玩转SQLite6:使用C语言来读写数据库

    上篇文章介绍了如何使用Pyhton语言来操作SQLite数据库,对于嵌入式开发,更多的是使用C/C++语言进行开发,因此,本篇介绍如何使用C语言来操作SQLite数据库。 1 SQ…

    大数据 2023年11月11日
    047
  • Android开发技能小结

    1.Intent显示跳转 2.访问sqlite 3.显示数据库内容 4.toast修改 5.多线程执行指定任务 1.Intent显示跳转 (1)在manifest.xml中注册活动…

    大数据 2023年11月10日
    055
  • .net Core 上传文件详解

    .net core 和.net framework上传文件有很多需要注意的地方.net framework 上传文件用httppostedfilebase.net core 上传文…

    大数据 2023年6月3日
    080
  • k8s部署redis哨兵

    大数据 2023年11月16日
    038
  • HTTP基础知识总结

    目录 ​​HTTP的请求方法及其作用​​ ​​GET和POST有什么区别?​​ ​​PUT和POST都是给服务器发送新增资源,有什么区别?​​ ​​PUT和PATCH都是给服务器发…

    大数据 2023年5月26日
    057
  • apache编译安装

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 源码包编译实例 下面通过编译安装httpd来深入理解源码包安装(httpd-2.4.54) 下载编译工具,httpd以及其两个依…

    大数据 2023年5月27日
    082
  • iOS CoreData的使用

    CoreData是一个专门管理数据服务的框架,把OC对象和存储在SQLite文件中的数据进行互相转换,极大地方便了开发者在数据服务方面的开发。 1. 创建CoreData 在文件创…

    大数据 2023年11月11日
    061
  • java sqlite 批量添加数据_java – 优化批量插入,SQLite

    我正在使用不同的缓冲区大小插入本地SQLite DB,并发现当缓冲区大小为10,000时,插入10,000,000行数据需要将近8分钟.换句话说,它需要1,000次写入来存储所有内…

    大数据 2023年11月12日
    034
  • Django 2.1.7 模型 – 使用mysql数据库连接访问

    上一篇​​Django 2.1.7 MVT模型示例 – 查询数据,返回渲染模板数据​​讲述了如何使用sqlite3作为数据库,执行模型查询数据,并返回渲染页面。 本篇章…

    大数据 2023年5月25日
    076
  • c++多继承多态

    C++多继承多态的实现 [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service…

    大数据 2023年6月3日
    075
  • docker安装Elasticsearch7.6集群并设置密码

    docker安装Elasticsearch7.6集群并设置密码 Elasticsearch从6.8开始, 允许免费用户使用X-Pack的安全功能, 以前安装es都是裸奔。接下来记录…

    大数据 2023年5月28日
    089
  • 【NLP】python中英文关键词抽取技术总结

    无论是在中文还是英文中关键词抽取技术都是有着很重要的应用价值和分析价值,下面在python环境中分别针对中文和英文介绍几种常用的关键词抽取方法。 1. 英文 抽取英文关键词的几种方…

    大数据 2023年5月28日
    0121
  • 微服务设计(五)—分布式配置中心与spring cloud stream

    一、Spring Cloud Stream 在实际的企业开发中,消息中间件是至关重要的组件之一。消息中间件主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最…

    大数据 2023年6月3日
    071
  • # 数据库基础(一)概念及分类

    数据库基础(一)概念及分类 数据库基础(一)概念及分类 一、数据库基础篇 * 相关概念 SQL分类 SQL语句 – DDL DML + 添加数据 修改数据 删除数据 D…

    大数据 2023年11月10日
    055
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球