阿里云centos 7 创建postfix服务器,并进行stmp验证,并结合phpmailer进行邮件发送
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里云centos 7 创建postfix服务器,并进行stmp验证,并结合phpmailer进行邮件发送相关的知识,希望对你有一定的参考价值。
由于centos默认会自带sendmail,而sendmail存在安全性问题和使用复杂的问题,故而选择postfix服务器,由于暂时没有收邮件的需求,故未安装dovecot。
1.[[email protected] ~]# yum remove sendmail -y #卸载自带的sendmail
2.[[email protected] ~] #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 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 #表示创建[email protected]$mydomain的邮箱账号(也是smtp的账号)和密码
15 #本例就是创建[email protected]账号和密码
16 #此处注意的是smtp登录用的账号并不是单纯的用户名 而是整个邮箱地址字符串
17 #假设此处设置的smtp账号[email protected]密码为test 下方测试时要用到
18
19 #查看sasldb2的用户和密码
20 sasldblistusers2
21 #此命令进用户查看sasldb的用户情况
22 #此命令回车后会输出诸如这样的内容:[email protected]: userPassword
23
24 #每次添加smtp用户完毕之后需重启postfix或reload
5.测试postfix配置文件并重新启动postfix
service postfix reload
6.更改sasldb2数据的权限,让postfix可以读取
chmod 755 /etc/sasldb2
7.测试stmp是否设置成功,这里使用telnet进行测试
直接本机telnet,上述添加的[email protected]账号和test密码需要base64编码,编码后的字符串为:
[email protected]为: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账号密码效验 返回后输入[email protected]的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 = "[email protected]";
14 $mail->Password = "test";
15 //$mail->IsSendmail(); //如果没有sendmail组件就注释掉,否则出现“Could not execute: /var/qmail/bin/sendmail ”的错误提示
16 $mail->AddReplyTo("[email protected]","service");//回复地址
17 $mail->From = "[email protected]";
18 $mail->FromName = "服务中心";
20 //$to = "[email protected]";
21 $to = "[email protected]";
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进行邮件发送的主要内容,如果未能解决你的问题,请参考以下文章
阿里云CentOS Linux服务器上搭建邮件服务器遇到的问题