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

阿里云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 = JJonline.Cn ESMTP Server20 #指定MUA通过smtp连接postfix时返回的header头信息21 #原始配置附带有postfix版本号 去掉即可,此项酌情处理22 #SMTP Config23 broken_sasl_auth_clients = yes24 #指定postfix兼容MUA使用不规则的smtp协议--主要针对老版本的outlook 此项对于本次配置无意义25 smtpd_client_restrictions = permit_sasl_authenticated26 #指定可以向postfix发起SMTP连接的客户端的主机名或ip地址27 #此处permit_sasl_authenticated意思是允许通过sasl认证(也就是smtp链接时通过了账号、密码效验的用户)的所有用户28 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination29 #发件人在执行RCPT TO命令时提供的地址进行限制规则 此处照搬复制即可30 smtpd_sasl_auth_enable = yes31 #指定postfix使用sasl验证 通俗的将就是启用smtp并要求进行账号、密码效验32 smtpd_sasl_local_domain = $mydomain33 #指定SMTP认证的本地域名 本次配置可以使用 smtpd_sasl_local_domain = ‘‘ 或干脆注释掉 默认为空34 smtpd_sasl_security_options = noanonymous35 #取消smtp的匿名登录 此项默认值为noanonymous smtp若能匿名登录危害非常大 此项请务必指定为noanonymous36 message_size_limit = 524288037 #指定通过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.conf11  12 #创建smtp账号13 saslpasswd2 -c -u `postconf -h mydomain` test #回车会要求输入密码,连续两次14 #表示创建test@$mydomain的邮箱账号(也是smtp的账号)和密码15 #本例就是创建test@jjonline.com.cn账号和密码16 #此处注意的是smtp登录用的账号并不是单纯的用户名  而是整个邮箱地址字符串17 #假设此处设置的smtp账号test@test.com密码为test  下方测试时要用到18  19 #查看sasldb2的用户和密码20 sasldblistusers221 #此命令进用户查看sasldb的用户情况22 #此命令回车后会输出诸如这样的内容:test@test.com: userPassword23  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

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

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