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

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

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

点击创建凭证,创建好后,新页面会有下载按钮,一定要及时下载凭证文件。
凭证文件里有 Smtp Username 和 Smtp Password,后面配置 postfix 邮件服务器的时候需要用到。

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

- 其他说明
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 邮件服务
使用如下命令安装,安装过程中间直接选择默认的配置一路确认即可,后面我们单独修改配置。
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 环境中,则只需要发送者邮件验证通过即可。

- 其他说明
若按照如上配置方式,邮件还是发送失败,可以查看机器上的日志,如/var/log/mail.log。还可以检查安全组,看是否是邮件相关端口未开放。
参考文档:https://docs.aws.amazon.com/ses/latest/dg/postfix.html
更多技术文章,请关注我的个人博客 www.immaxfang.com 和小公众号 Max的学习札记。
ubuntu使用postfix和AWS-SES发送邮件的更多相关文章
- Amazon SES介绍 - SES发送邮件的过程
Amazon SES, 全称Amazon Simple Email Service,即Amazon简单邮件服务,它是Amazon提供的一款供开发人员或公司企业用来处理邮件相关业务的服务,也就是说, ...
- 邮件发送服务AWS SES,Mailgun以及SendCloud(转)
原文:http://www.l4zy.com/posts/aws_ses-mailgun-sendcloud.html 电子邮件这一已经诞生很多年的互联网基础服务并没有随着时间的推移而慢慢消亡,实际上 ...
- 使用Windows的mstsc远程桌面连接到Ubuntu图形界面(AWS上安装的Ubuntu系统)
参考文档:https://blog.csdn.net/liumaolincycle/article/details/50052619 https://www.cnblogs.com/eczhou/p/ ...
- CentOS 6.5 and Ubuntu 14.04 使用外部邮箱发送邮件
我们可以使用外部邮箱(163,126,gmail,139等等)为我们发邮件 for CentOS 6.5 yum -y install mailx vi /etc/mail.rc 在文件的末行添加以下 ...
- Ubuntu 14.04下安装GitLab指南
摘要 GitLab 是一个用于仓库管理系统的开源项目.使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 在GitLab的官方网站上面对Ubuntu的支持也是很好的,有比较详尽的安装指南. ...
- 免费超大量邮件发送服务Amazon SES和Mailgun提供SMTP和API支持
一般来说网站注册.论坛消息.新闻推送.广告宣传等都会有发送邮件服务,大量的邮件发送服务如果用PHP来发送,一是会消耗主机资源,二是容易被各大邮箱判定为垃圾邮件而被拒收.用第三方的邮局服务发送邮件,可以 ...
- Linux基础命令---sendmail发送邮件
sendmail sendmail是postfix中的一个发送邮件的代理程序,它负责发送邮件到远程服务器,并且可以接收邮件.sendmail在发送邮件的时候,默认从标砖输入读取内容,以".& ...
- 烂泥:Postfix邮件服务器搭建之软件安装与配置
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb Postfix邮件服务器的搭建需要使用到几个软件,分别是cyrus-sasl.postf ...
- Centos安装配置Postfix邮件服务器
发布时间:July 6, 2012 // 分类:Mail // No Comments 在安装邮件服务器之前先了解几个名词,以后会用到: 1 2 3 4 5 6 MUA:用户代理端,即用户使用的写信. ...
随机推荐
- Exchange日志清理
1.清理日志--完整备份 Exchange Server 2013被部署在Windows Server 2012 及以上版本的操作系统中,使用操作系统内的"Windows Server Ba ...
- 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...
- Python入门-内置对象函数
1.callable() 查看函数知否可调用,可调用返回True,不可用返回False print("input函数:", callable(input)) #input函数: T ...
- crm单元测试使用
Action使用 使用paramBag传递入参,填写入参名,入参值,后使用 serviceProvider传入插件. Assert.AreEqual(this.output["state&q ...
- oracle查看impdp进度
当数据量比较大的时候,当你导入,导出的时候,在数据库中查看运行的情况,可以利用下面的视图查看: //这里由于导表空间时出现问题,所以再次执行导入任务.但是已有任务在执行,查看执行中的任务方法. ora ...
- MySQL 集群历史版本信息
MySQL 集群有两种命名方式,在Mysql5.1版本之前,MySQL 集群是以MySQL版本号命名:MySQL5.1(包括)之后开始以 mysql-mysql_server_version-ndb- ...
- show binary logs
列出服务器上的二进制日志文件.该语句用作" purge binary logs语句"中描述的过程的一部分,该过程显示了如何确定可以清除哪些日志. show binary logs ...
- zabbix server&proxy部署操作过程
zabbix server&proxy部署操作过程 系统:ubuntu20.04 zabbix版本: 5.4 安装zabbix server 安装方式: 包管理安装,docker,源码,app ...
- 发布nuget包的正确姿势---cicd自动打包发布nuget包
最轻便的发布nuget包方式,方便cicd自动打包发布nuget包 首先新建项目 项目名随便取,这里就叫它GuiH.ClassLibrary 默认即可,需要改目标版本时,等创建好再改 项目创建好了 随 ...
- nginx反向代理隐藏端口号和项目名
可利用nginx反向代理隐藏端口号和项目名,直接输入ip即可访问对应的tomcat项目,配置nginx安装目录的nginx/conf/nginx.conf文件,修改如下:(开了两个web项目:项目名为 ...