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的日志显示: 
 
 
 
查看邮箱是否收到:收到了 
 
