Linux/UNIX 下的老牌邮件服务器。
Sendmail作为一种免费的邮件服务器软件,已被广泛的应用于各种服务器中,它在稳定性、可移植性、及确保没有 bug 等方面具有一定的特色,且可以在网络中搜索到大量的使用资料。
一、邮件发送原理图
MUA:Mail User Agent,邮件用户代理,用来编写,收发邮件
MTA:Mail Transfer Agent,邮件传输代理,将邮件传输到正确目的地
**MDA:**Mail Delivery Agent,邮件分发代理,将邮件分发到正确目的用户
举例说明,假如A用户使用的是QQ邮箱,B用户使用的是163邮箱,A要向B发送一封邮件。流程如下:
1、A用户通过MUA编写好邮件,并发送
2、该邮件通过MTA,首先发送到QQ邮件服务器
3、QQ邮件服务器分析到目的邮箱地址是163,所以再通过MTA传送到163邮件服务器
4、163邮件服务器收到该邮件
5、由于使用163邮箱的用户有很多,再通过MDA把该邮件发送到正确的用户
6、B用户通过MUA就可以查看A用户发送的邮件。
二、安装
mail是MUA,sendmail是MTA
- sendmail必须先要安装两个包
sudo apt**-get install sendmail
sudo apt-get install sendmail-**cf # 配置工具 - ubuntu下最常使用的是mail功能,需要安装mailutils
sudo apt**-**get install mailutils - 若需要使用带"附件"的功能,还需要安装sharutils
sudo apt**-**get install sharutils - 测试
输入命令:ps aux | grep sendmail
相关文件:
三、配置
默认情况下,sendmail只会为本机用户发送邮件,若要将它扩展到整个Internet,则修改sendmail配置宏文件,路径为/etc/mail/sendmail.mc。
sudo vi /etc/mail/sendmail.mc
将Addr=127.0.0.1改为0.0.0.0,表明可以连接到任何服务器上
保存修改的文件,下面备份配置文件:
cd /etc/mail
mv sendmail.cf sendmail.cf~
然后生成新的配置文件:
m4 sendmail**.mc > sendmail.**cf
重启sendmail生效:systemctl restart sendmail 或者 **/etc/init.d/**sendmail restart
四、测试发送邮件
常用的发送邮件方式有以下几种:
- 如何写一般的邮件: mail test**@qq.com Cc 编辑抄送对象,Subject:邮件主题,输入回车,邮件正文后,按Ctrl-**D结束
- 快速发送方式: echo "邮件正文" | mail -s "邮件主题" test@126.com
- 以文件内容作为邮件正文来发送: mail -s test test@126.com < test**.**txt
- 发送带附件的邮件: uuencode 附件 附件名| mail -s "邮件标题" 收信人 -b 密送人 -- -f 发信人 -F 发信人名称
查看日志:tail -f /var/log/mail.log
五、邮件发送问题
1、发送失败,日志报错 My unqualified host name (node1) unknown; sleeping for retry
/var/log/mail.log日志有如下报错:
参考 Sendmail: "unqualified hostname unknown; sleeping for retry unqualified hostname - Linux Tutorials - Learn Linux Configuration,
这个错误输出实际上使问题非常清楚。文本的意思正是它所说的。这意味着 Sendmail 无法解析您的完全限定域名 。 unqualified host name。
在我们的例子中,系统的主机名是node1(hostname命令查看)
要解决此问题,请更改: /etc/hosts
重启服务:systemctl restart sendmail
再次发送邮件:echo '邮件内容' | mail -s '邮件标题' 1162886013@qq.com
tail -f /var/log/mail.log的日志显示:
查看邮箱是否收到:收到了