linux中的sendmail发送邮件

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

  1. sendmail必须先要安装两个包
    sudo apt**-get install sendmail
    sudo apt
    -get install sendmail-**cf # 配置工具
  2. ubuntu下最常使用的是mail功能,需要安装mailutils
    sudo apt**-**get install mailutils
  3. 若需要使用带"附件"的功能,还需要安装sharutils
    sudo apt**-**get install sharutils
  4. 测试
    输入命令: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

四、测试发送邮件

常用的发送邮件方式有以下几种:

  1. 如何写一般的邮件: mail test**@qq.com Cc 编辑抄送对象,Subject:邮件主题,输入回车,邮件正文后,按Ctrl-**D结束
  2. 快速发送方式: echo "邮件正文" | mail -s "邮件主题" test@126.com
  3. 以文件内容作为邮件正文来发送: mail -s test test@126.com < test**.**txt
  4. 发送带附件的邮件: 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的日志显示:

查看邮箱是否收到:收到了