因爲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
結果原文並作了適當添加修改,感謝這兩篇文章對個人幫助