阿里云centos 7 创建postfix服务器,并进行stmp验证,并结合phpmailer进行邮件发送

由于centos默认会自带sendmail,而sendmail存在安全性问题和使用复杂的问题,故而选择postfix服务器,由于暂时没有收邮件的需求,故未安装dovecot。

1.[root@postfix-server ~]# yum remove sendmail -y    #卸载自带的sendmail

2.[root@postfix-server ~] #yuminstall postfix –y  # 安装postfix服务的主程序包

配置项如下:

 1 queue_directory= /var/spool/postfix #队列目录,也是运行的根目录
 2 mydomain = demo.test.com #指定邮件域,接收用来识别的
 3 myhostname= test.com #发送邮件的主机名
 4 mynetworks= 127.0.0.0/8 #指定允许使用的ip地址段
 5 myorigin =$mydomain #发信地址,此设置显示为@postfix-server
 6 inet_interfaces= localhost # 由于我只需要监听本地的,故选择localhost,若需要监听所有则选择all
 7 mydestination= $myhostname, localhost.$mydomain, localhost, $mydomain
 8 mynetworks_style= subnet #允许转发的来源网段,可选subnet子网,class网段,host本机
 9 local_recipient_maps = //212行,把前面的注释拿掉
10 relay_domains= $mydestination #允许转发的目标域
11 alias_maps= hash:/etc/aliases #对某个用户发,文件中的用户都可以收到邮件
12 alias_database= hash:/etc/aliases 
13 smtpd_banner= $myhostname ESMTP "postfix mail server" #自定服务器信息
14 
15 inet_protocols = ipv4 #只允许使用ipv4,由于服务器不支持ipv6,在配置完毕后重启发现无法启动postfix服务器,排错后修改此项启动成功
16 
17 继续配置stmp验证
18 
19 smtpd_banner = test.com ESMTP Server
20 #指定MUA通过smtp连接postfix时返回的header头信息
21 #原始配置附带有postfix版本号 去掉即可,此项酌情处理
22 #SMTP Config
23 broken_sasl_auth_clients = yes
24 #指定postfix兼容MUA使用不规则的smtp协议--主要针对老版本的outlook 此项对于本次配置无意义
25 smtpd_client_restrictions = permit_sasl_authenticated
26 #指定可以向postfix发起SMTP连接的客户端的主机名或ip地址
27 #此处permit_sasl_authenticated意思是允许通过sasl认证(也就是smtp链接时通过了账号、密码效验的用户)的所有用户
28 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
29 #发件人在执行RCPT TO命令时提供的地址进行限制规则 此处照搬复制即可
30 smtpd_sasl_auth_enable = yes
31 #指定postfix使用sasl验证 通俗的将就是启用smtp并要求进行账号、密码效验
32 smtpd_sasl_local_domain = $mydomain
33 #指定SMTP认证的本地域名 本次配置可以使用 smtpd_sasl_local_domain = '' 或干脆注释掉 默认为空
34 smtpd_sasl_security_options = noanonymous
35 #取消smtp的匿名登录 此项默认值为noanonymous smtp若能匿名登录危害非常大 此项请务必指定为noanonymous
36 message_size_limit = 5242880
37 #指定通过postfix发送邮件的体积大小 此处表示5M

 

3.配置完毕后,保存配置项,重新加载postfix并启动 service postfix reload

4.sasldb2建立smtp用户和密码(类似于注册账号密码)   原文写的比较详细,我就直接复制了

 1 #6
 2 #配置postfix启用sasldb2作为smtp的账号秘密效验方式
 3 #编辑通过sasl启用smtp账号密码效验的配置
 4 vi /etc/sasl2/smtpd.conf #vi写入或编辑内容如下:
 5 #####
 6 pwcheck_method: auxprop
 7 auxprop_plugin: sasldb
 8 mech_list: plain login CRAM-MD5 DIGEST-MD5
 9 #####
10 #这里需要注意的是:这个配置文件的位置是64位机器上的,32位机器应该在:/usr/lib/sasl2/smtpd.conf
11  
12 #创建smtp账号
13 saslpasswd2 -c -u `postconf -h mydomain` test #回车会要求输入密码,连续两次
14 #表示创建test@$mydomain的邮箱账号(也是smtp的账号)和密码
15 #本例就是创建test@test.com账号和密码
16 #此处注意的是smtp登录用的账号并不是单纯的用户名  而是整个邮箱地址字符串
17 #假设此处设置的smtp账号test@test.com密码为test  下方测试时要用到
18  
19 #查看sasldb2的用户和密码
20 sasldblistusers2
21 #此命令进用户查看sasldb的用户情况
22 #此命令回车后会输出诸如这样的内容:test@test.com: userPassword
23  
24 #每次添加smtp用户完毕之后需重启postfix或reload

5.测试postfix配置文件并重新启动postfix

service postfix reload

6.更改sasldb2数据的权限,让postfix可以读取

chmod 755 /etc/sasldb2

 7.测试stmp是否设置成功,这里使用telnet进行测试

直接本机telnet,上述添加的test@test.com账号和test密码需要base64编码,编码后的字符串为:

test@test.com为:dGVzdEB0ZXN0LmNvbQ==

test为:dGVzdA==

 

若没有安装telnet,可通过yum install telnet进行安装

 1 #若没安装telnet 需安装telnet 
 2 yum install telnet
 3  
 4 #telnet测试smtp连接postfix
 5 telnet 127.0.0.1 25 #回车后会显示由$smtpd_banner配置的欢迎信息
 6 EHLO test  #输入ehlo消息头进行握手 消息返回后继续
 7 AUTH LOGIN  #要求进行smtp账号密码效验  返回后输入test@test.com的base64编码
 8 dGVzdEB0ZXN0LmNvbQ==  #返回后输入test密码 也是base64编码
 9 dGVzdA== #回车后就会显示smtp效验成功  接下来通过phpmailer来测试发送邮件功能
10  
11 #注意  要退出telnet 输入quit回车即可

8.在阿里云添加a,txt解析。

9.本文使用php语言进行测试发送邮件,通过phpmailer进行发邮件测试,

也可以通过php自带的mail函数进行发邮件,但是有诸多使用局限,所以选择phpmailer

先去github上下载phpmailer源码,只需要其中的四个文件,如下:

进行发送邮件测试:

 1 <?php 
 2     header("content-type:text/html;charset=utf-8"); 
 3     ini_set("magic_quotes_runtime",0); 
 4     require_once 'phpmailer/class.phpmailer.php'; 
 5     require_once "phpmailer/class.smtp.php"; 
 6     try { 
 7         $mail = new PHPMailer(true); 
 8         $mail->IsSMTP(); 
 9         $mail->CharSet='UTF-8'; //设置邮件的字符编码,这很重要,不然中文乱码 
10         $mail->SMTPAuth = true; //开启认证 
11         $mail->Port = 25; 
12         $mail->Host = "127.0.0.1"; 
13         $mail->Username = "test@test.com"; 
14         $mail->Password = "test"; 
15         //$mail->IsSendmail(); //如果没有sendmail组件就注释掉,否则出现“Could not execute: /var/qmail/bin/sendmail ”的错误提示 
16         $mail->AddReplyTo("service@lejucd.com","service");//回复地址 
17         $mail->From = "service@lejucd.com"; 
18         $mail->FromName = "服务中心"; 
20         //$to = "123456@qq.com"; 
21         $to = "123456@126.com"; 
22         $mail->AddAddress($to); 
23         $mail->Subject = "测试标题"; 
24         $mail->Body = "<h1>phpmail演示</h1>这是测试"; 
25         $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; //当邮件不支持html时备用显示,可以省略 
26         $mail->WordWrap = 80; // 设置每行字符串的长度 
27         //$mail->AddAttachment("f:/test.png"); //可以添加附件 
28         $mail->IsHTML(true); 
29         $mail->Send(); 
30         echo '邮件已发送'; 
31     } catch (phpmailerException $e) { 
32         echo "邮件发送失败:".$e->errorMessage(); 
33     } 
34 ?> 

运行结果:邮件已发送  查看邮箱已收到邮件,经测试,网易,新浪邮箱都能正常收到邮件,唯独QQ邮箱收不到,通过查看mail日志(tail -f /var/log/maillog)查看到,QQ邮箱提示ip发送太频繁。。。目前还没有找到原因,继续研究中,也希望有遇到同样问题或知道办法的人能够给我留言。。谢谢。。

 

本文参考来源:

http://www.centoscn.com/CentosServer/lighttpd/2015/1203/6474.html

http://blog.jjonline.cn/linux/185.html

结果原文并做了适当添加修改,感谢这两篇文章对我的帮助

posted @ 2016-09-23 11:03  胖子移不动  阅读(2450)  评论(0编辑  收藏