(一)、环境 系统:CentOS7.4 Sendmail安装 OTRS:6.0.18
(二)、SMTP介绍: SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。通常它工作在两种情况下:一是邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。
2、SMTP协议工作机制
SMTP通常有两种工作模式。发送SMTP和接收SMTP。具体工作方式为:发送SMTP在接收到用户的邮件请求后,判断此邮件是否为本地邮件,若是直接投送到用户的邮箱,否则向DNS查询远端邮件服务器的MX记录,并建立与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方向传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此反复多次。当接收者收到全部邮件后会接收到特别的序列,入伏哦接收者成功处理了邮件,则返回OK应答。
3、SMTP的连接和发送过程
(a)建立TCP连接
(b)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;服务器端正希望以OK作为响应,表明准备接收
(c)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;服务器端则表示是否愿意为收件人接收邮件
(d)协商结束,发送邮件,用命令DATA发送
(e)以.表示结束输入内容一起发送出去
(f)结束此次发送,用QUIT命令退出
(三)sendmail安装与配置 sendmail是linux系统中一个邮箱系统,如果我们在系统中配置好sendmail就可以直接使用它来发送邮箱。 sendmail的配置文件: /etc/mail/sendmail.cf :Sendmail的主配置文件; /etc/mail/access :中继访问控制; /etc/mail/domaintable ;域名映射; /etc/mail/local-host-names ;本地主机别名; /etc/mail/mailertable :为特定的域指定特殊的路由规则; /etc/mail/virtusertable :虚拟域配置。 中继的配置 是指一台服务器接受并传递源地址和目的地址都不是本服务器的邮件。 在两个文件中进行设置: /etc/mail/relay-domains /etc/mail/access
1、sendmail安装
yum install -y sendmail
yum install -y sendmail-cf
2、创建自定义服务启动。
systemctl enable sendmail
systemctl start sendmail
3、sendmail配置SMTP认证 将下面两行内容前面的dnl去掉。在sendmail文件中,dnl表示该行为注释行,是无效的,因此通过去除行首的dnl字符串可以开启相应的设置行。 先备份在编辑
cp /etc/mail/sendmail.rc /etc/mail/sendmail.rc.bak
vim /etc/mail/sendmail.mc
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
4、设置Sendmail服务的网络访问权限(如果是直接本机调用,可以不用操作,采用默认的127.0.0.1。不过最后还是改成0.0.0.0) 将127.0.0.1改为0.0.0.0,意思是任何主机都可以访问Sendmail服务。 如果仅让某一个网段能够访问到Sendmail服务,将127.0.0.1改为形如192.168.1.0/24的一个特定网段地址。
[root@otrs ~]# vim /etc/mail/sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
5、生成配置文件
Sendmail的配置文件由m4来生成,m4工具在sendmail-cf包中。如果系统无法识别m4命令,说明sendmail-cf软件包没有安装
[root@otrs ~]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
6、重启服务
systemctl restart sendmail
7、查看日志和队列
[root@otrs ~]# mailq
/var/spool/mqueue is empty
Total requests: 0
[root@otrs ~]# tail -f /var/log/maillog
May 13 21:12:06 otrs sendmail[2891]: x4DDC4w2002889: to=<songyaqi@kjdow.com>, delay=00:00:02, xdelay=00:00:02, mailer=esmtp, pri=120993, relay=mxbiz1.qq.com. [183.57.48.34], dsn=5.0.0, stat=Service unavailable
May 13 21:12:06 otrs sendmail[2891]: x4DDC4w2002889: x4DDC6w2002891: DSN: Service unavailable
May 13 21:12:07 otrs sendmail[2891]: STARTTLS=client, relay=mxbiz2.qq.com., version=TLSv1/SSLv3, verify=FAIL, cipher=AES128-SHA256, bits=128/128
May 13 21:12:08 otrs sendmail[2891]: x4DDC6w2002891: to=<otrs@kjdow.com>, delay=00:00:02, xdelay=00:00:02, mailer=esmtp, pri=32188, relay=mxbiz2.qq.com. [183.57.48.34], dsn=5.0.0, stat=Service unavailable
May 13 21:12:08 otrs sendmail[2891]: x4DDC6w2002891: x4DDC6w3002891: return to sender: Service unavailable
May 13 21:12:08 otrs sendmail[2891]: x4DDC6w3002891: to=root, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=33212, dsn=2.0.0, stat=Sent
May 13 21:36:23 otrs sendmail[3202]: starting daemon (8.14.7): SMTP+queueing@01:00:00
May 13 21:36:23 otrs sm-msp-queue[3219]: starting daemon (8.14.7): queueing@01:00:00
May 13 21:43:28 otrs sendmail[3483]: starting daemon (8.14.7): SMTP+queueing@01:00:00
May 13 21:43:28 otrs sm-msp-queue[3500]: starting daemon (8.14.7): queueing@01:00:00
(四)、测试发送邮箱
(1)、第一种方法安装sendmail和mailx
[root@otrs ~]#yum -y install mailx
创建一个邮件内容文件,然后发邮件(注意-s参数后的邮件标题要用单引号,不能使用双引号,否则发邮件会失败!)
[root@otrs ~]# echo 'This is test mail'>/root/content.txt
[root@otrs ~]# cat /root/content.txt
This is test mail
[root@otrs ~]# mail -s 'this is otrs test message' xxxxxxx@qq.com < /root/content.txt
见下图。
也可以通过管道符直接发送邮件内容
[root@otrs ~]# echo "this is first test message of otrs" | mail -s 'orts-otrs' 284315732@qq.com
(二)第二种方法:利用外部的smtp服务器进行发送。 通过外部的smtp服务器进行发送,修改/etc/mail.rc文件,在最下边添加如下配置。上面第一种方式中,/bin/mail命令会默认使用本地sendmail发送邮件,这样要求本地的机器必须安装和启动Sendmail服务,配置非常麻烦,而且会带来不必要的资源占用。而通过修改配置文件可以使用外部SMTP服务器,可以达到不使用sendmail而用外部的smtp服务器发送邮件的目的。 修改/etc/mail.rc文件(有的版本叫/etc/nail.rc,添加下面内容: set from=fromUser@domain.com smtp=smtp.domain.comset smtp-auth-user=username smtp-auth-password=passwordset smtp-auth=login
参数说明: from是发送的邮件地址 smtp是发生的外部smtp服务器的地址 smtp-auth-user是外部smtp服务器认证的用户名。注意一定要填写邮件全称!! smtp-auth-password是外部smtp服务器认证的用户密码 smtp-auth是邮件认证的方式
[root@otrs ~]# cat /etc/mail.rc
set from=otrs@kjdow.com
set smtp=smtp.exmail.qq.com
set smtp-auth-user=otrs@qq.com
set smtp-auth-password=xxxx
set smtp-auth=login
通过mail -s 'this is otrs test message' xxxxxxx@qq.com < /root/content.txt 进行发送邮件了。
(五)、配置otrs工单管理系统。 如下图,依次选中系统管理---系统配置---Core---Email---SendmailModule模块
备注如果sendmail出现 DSN: Service unavailable。这是由于主机名没有正确解析导致的。具体解决步骤如下:
1、cat /etc/hosts
[root@otrs ~]# cat /etc/hosts
183.57.48.34 mxbiz1.qq.com.
192.168.4.203 otrs.bakheet.cn.
2、cat /etc/sysconfig/network
[root@otrs ~]# cat /etc/sysconfig/network
HOSTNAME=otrs.bakheet.cn
3、重启服务
注意/etc/hosts文件和/etc/sysconfig/network 里面的HOSTNAME必须一致,
并且修改/etc/sysconfig/network里面的hostname文件,必须用命令hostname xxx使其生效,
否则会提示 dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]