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

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

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

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

配置项以下:git

 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 reloadgithub

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

 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能够读取dom

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

结果原文并作了适当添加修改,感谢这两篇文章对个人帮助

相关文章
相关标签/搜索