相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- PHP中opcode緩存簡(jiǎn)單用法分析
- thinkPHP控制器變量在模板中的顯示方法示例
- PHP move_uploaded_file() 函數(shù)(將上傳的文件移動(dòng)到新位置)
- dirname(__FILE__)的含義和應(yīng)用說(shuō)明
- thinkPHP5框架實(shí)現(xiàn)分頁(yè)查詢功能的方法示例
- PHP中單雙號(hào)與變量
- PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法分析
- Laravel ORM對(duì)Model::find方法進(jìn)行緩存示例詳解
- PHP讀寫文件高并發(fā)處理操作實(shí)例詳解
- 【CLI】利用Curl下載文件實(shí)時(shí)進(jìn)度條顯示的實(shí)現(xiàn)
Linux服務(wù)器下PHPMailer發(fā)送郵件失敗的問(wèn)題解決

需求
更換服務(wù)器之后,我發(fā)現(xiàn)我的發(fā)送郵件功能失效了!原來(lái)的服務(wù)器是可以的,一定是哪里出問(wèn)題了,決定來(lái)排查一下。我是用的PHPMailer,SMTP方式發(fā)送郵件的。
排查過(guò)程
這種方式首先PHP要開(kāi)啟sockets拓展,查了一下phpinfo頁(yè)面,是開(kāi)啟的:
看了一下openssl也是開(kāi)啟(因?yàn)槟昧藂q郵箱來(lái)測(cè)),所以沒(méi)問(wèn)題:
那就再看一下allow_url_fopen,開(kāi)啟的,沒(méi)問(wèn)題:
是不是禁用了函數(shù)?沒(méi)有禁用,沒(méi)問(wèn)題:
那配置上就沒(méi)有問(wèn)題了,我就想,是不是端口被占用了?
運(yùn)行一下:netstat -tnlp
第一條就是這玩意:
25端口被占用,被一個(gè)叫master的玩意占了,好家伙,看看是什么東西,運(yùn)行ps -f -p 1818
看一下結(jié)果,1818為當(dāng)前這個(gè)程序的進(jìn)程號(hào)PID,可以看到是:
是postfix這個(gè)東西在運(yùn)行,可能搭建環(huán)境的時(shí)候不小心給裝了。
postfix是個(gè)什么東西?
postfix是一款運(yùn)行在Linux環(huán)境下免費(fèi)的郵件服務(wù)器,或者稱為MTA(Mail Transfer Agent),其它類似的有Sendmail、Qmail、exim及Zmailer 等。所以Postfix就是一個(gè)搭郵件服務(wù)器的。那這玩意肯定是沖突了,我們要通過(guò)25端口請(qǐng)求外部的郵件服務(wù)器,而本地用25端口運(yùn)行了一個(gè)郵件服務(wù)器,這個(gè)是不行的估計(jì).
嘗試解決問(wèn)題
我們嘗試一下用我們這個(gè)郵件服務(wù)器去發(fā)郵件,而不是用外部服務(wù)器(比如之前用阿里云企業(yè)郵),放了一小段測(cè)試代碼到PHPMailer目錄同級(jí)下:
<?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 = 'gzp@gzpblog.com';//你的郵箱賬號(hào) $mail->Password = '扒拉扒拉。。。';//你的郵箱密碼 $mail->From = 'gzp@gzpblog.com';//你的郵箱賬號(hào) $mail->FromName = '鍋?zhàn)?; $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 "郵件發(fā)送失?。?.$e->errorMessage(); }