一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Linux服務器下PHPMailer發送郵件失敗的問題解決

Linux服務器下PHPMailer發送郵件失敗的問題解決

2021-04-28 17:38鍋子博客 PHP教程

這篇文章主要給大家介紹了關于如何解決Linux服務器下PHPMailer發送郵件失敗的問題,文中通過示例代碼介紹的很詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。

需求

更換服務器之后,我發現我的發送郵件功能失效了!原來的服務器是可以的,一定是哪里出問題了,決定來排查一下。我是用的PHPMailer,SMTP方式發送郵件的。

排查過程

這種方式首先PHP要開啟sockets拓展,查了一下phpinfo頁面,是開啟的:

Linux服務器下PHPMailer發送郵件失敗的問題解決

看了一下openssl也是開啟(因為拿了qq郵箱來測),所以沒問題:

Linux服務器下PHPMailer發送郵件失敗的問題解決

那就再看一下allow_url_fopen,開啟的,沒問題:

Linux服務器下PHPMailer發送郵件失敗的問題解決

是不是禁用了函數?沒有禁用,沒問題:

Linux服務器下PHPMailer發送郵件失敗的問題解決

那配置上就沒有問題了,我就想,是不是端口被占用了?

運行一下:netstat -tnlp

第一條就是這玩意:

Linux服務器下PHPMailer發送郵件失敗的問題解決

25端口被占用,被一個叫master的玩意占了,好家伙,看看是什么東西,運行ps -f -p 1818看一下結果,1818為當前這個程序的進程號PID,可以看到是:

Linux服務器下PHPMailer發送郵件失敗的問題解決

是postfix這個東西在運行,可能搭建環境的時候不小心給裝了。

postfix是個什么東西?

postfix是一款運行在Linux環境下免費的郵件服務器,或者稱為MTA(Mail Transfer Agent),其它類似的有Sendmail、Qmail、exim及Zmailer 等。所以Postfix就是一個搭郵件服務器的。那這玩意肯定是沖突了,我們要通過25端口請求外部的郵件服務器,而本地用25端口運行了一個郵件服務器,這個是不行的估計.

嘗試解決問題

我們嘗試一下用我們這個郵件服務器去發郵件,而不是用外部服務器(比如之前用阿里云企業郵),放了一小段測試代碼到PHPMailer目錄同級下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php header("content-type:text/html;charset=utf-8"); require 'PHPMailer/class.phpmailer.php'; try { $mail = new PHPMailer(true); $mail->IsSMTP();
 $mail->CharSet='UTF-8';
 $mail->SMTPAuth = true;
 $mail->Port = 25;
 $mail->Host = '127.0.0.1';//郵箱smtp地址
 $mail->Username = '[email protected]';//你的郵箱賬號
 $mail->Password = '扒拉扒拉。。。';//你的郵箱密碼
 $mail->From = '[email protected]';//你的郵箱賬號
 $mail->FromName = '鍋子';
 $to = "扒拉扒拉@qq.com";
 $mail->AddAddress($to);
 $mail->Subject = "test";
 $mail->Body = 'hello!';
 $mail->WordWrap = 80;
 $mail->IsHTML(true);
 $mail->Send();
 echo "success!";
 } catch (phpmailerException $e) {
 echo "郵件發送失敗:".$e->errorMessage();
}

通過25端口的本地服務器發送郵件,運行這個頁面,發現不行,報錯不能夠驗證,說明這其中還有一些配置要弄,暫時行不通,不往下深究本地服務器發送了,我們嘗試一下換回:

?
1
$mail->Host = ‘smtp.mxhichina.com'; //阿里云的郵箱smtp地址

試一下,還是不行:

Linux服務器下PHPMailer發送郵件失敗的問題解決

沒辦法連接到SMTP。那我們把25端口的postfix服務器殺掉, 執行kill 1818(當前postfix的PID),再執行一次,還是同樣錯誤,無法連接上。這就奇了怪了,25端口沒有程序運行了,還不行。

可能的原因

查到有可能是因為ipv6的原因,phpMailer在進行smtp服務器DNS解析時,得到了IP v6地址,然后與IP v6解析到的地址進行連接,導致連接失敗。

我試一下:

ip -6 addr show

Linux服務器下PHPMailer發送郵件失敗的問題解決

沒東西,那又不是這個問題。

那是什么原因呢?

解決問題

既然25端口不可用,于是我想,是否可以嘗試一下其它端口,用465端口試試。

465端口(SMTPS):465端口是為SMTPS(SMTP-over-SSL)協議服務開放的,這是SMTP協議基于SSL安全協議之上的一種變種協議,它繼承了SSL安全協議的非對稱加密的高度安全可靠性,可防止郵件泄露。SMTPS和SMTP協議一樣,也是用來發送郵件的,只是更安全些,防止郵件被黑客截取泄露,還可實現郵件發送者抗抵賴功能。防止發送者發送之后刪除已發郵件,拒不承認發送過這樣一份郵件。

465端口似乎看起來還更好,直接就開始嘗試了,進行以下嘗試,以下為命令:

sbin/iptables -I OUTPUT -p tcp –dport 465 -j ACCEPT  打通465端口

/etc/rc.d/init.d/iptables save 保存

service iptables restart 重啟

/etc/init.d/iptables status 查看需要打開的端口是否生效?

Linux服務器下PHPMailer發送郵件失敗的問題解決

似乎可行,現在嘗試一下,用SMTP的465SSL連接方式來發送郵件,稍微改了一下測試代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php header("content-type:text/html;charset=utf-8"); require 'PHPMailer/class.phpmailer.php'; try { $mail = new PHPMailer(true); $mail->IsSMTP();
$mail->CharSet='UTF-8';
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->Host = 'smtp.mxhichina.com';//郵箱smtp地址
$mail->Username = '[email protected]';//你的郵箱賬號
$mail->Password = '扒拉扒拉。。。';//你的郵箱密碼
$mail->From = '[email protected]';//你的郵箱賬號
$mail->FromName = '鍋子';
$to = "扒拉扒拉@qq.com";
$mail->AddAddress($to);
$mail->Subject = "test";
$mail->Body = 'hello!';
$mail->WordWrap = 80;
//$mail->AddAttachment("f:/test.png"); //可以添加附件
$mail->IsHTML(true);
$mail->Send();
echo "success!";
} catch (phpmailerException $e) {
echo "郵件發送失敗:".$e->errorMessage(); //測試的時候可以去掉此行的注釋
}

執行,成功!右下角彈出了QQ郵件的提醒。

總結

PHPMailer通過465端口進行更安全的SMTPS協議發送郵件

可以修改:

?
1
$mail->Port = 465;

為:

?
1
2
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;

即可。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲人的天堂男人爽爽爽 | 天堂在线免费观看 | 欧美日韩国产最新一区二区 | 日韩在线视频免费观看 | 日韩网站在线观看 | 关晓彤被调教出奶水 | 三上悠亚精品专区久久 | 欧美成a人片免费看久久 | 亚洲婷婷在线视频 | 大吊操 | 久久青青草视频在线观 | 爱情岛论坛亚洲自拍 | 无人区乱码1区2区3区网站 | 国产人成精品午夜在线观看 | 男人女人日皮 | 69日本xxxhd| 青青草精品 | 婚前试爱全集免费观看 | 大妹子最新视频在线观看 | 四虎在线最新地址公告 | 亚洲AV无码专区国产精品麻豆 | 国产一区二区在线免费观看 | 性夜夜春夜夜爽AA片A | 国产成人毛片 | 深夜在线小视频 | 久久久91精品国产一区二区 | 成人女人天堂午夜视频 | 成人尤物 | 亚洲黄网站wwwwww | 亚洲成人一区在线 | 午夜精品久久久久久久99蜜桃 | 久久精品亚洲热综合一本 | 美女扒下内裤让男人桶的图片 | 色哟哟观看 | 爱色v| 男人天堂中文字幕 | 九九国产视频 | 好吊色网站 | caoporen97免费公开视频 | 新新电影理论中文字幕 | 亚洲成在人线久久综合 |