lnmp中mail函數不能發送郵件2種解決辦法

來源:互聯網
上載者:User

方法一,使用sendmail組件來發郵件

1.安裝 sendmail 組件

yum install sendmail

2.使用下面的命令重啟php-fpm進程

/etc/init.d/php-fpm restart

3.檢測sendmail是否運行正常

/etc/init.d/sendmail status

如果顯示正在運行running 就可以。

可能用到的命令

/etc/init.d/sendmail start (啟動sendmail)
/etc/init.d/sendmail stop  (關閉sendmail)
/etc/init.d/sendmail restart (重啟sendmail)

4.配置php.ini,填寫sendmail的絕對路徑

使用命令開啟編輯php.ini

vi /usr/local/php/etc/php.ini

輸入?sendmail_path 尋找定位(或者手動跳轉找到sendmail_path),你會發現預設是下面的代碼

;sendmail_path =

按 i 進入編輯,將這行修改為

sendmail_path = /usr/sbin/sendmail -t –i

按 Esc 鍵退出編輯,輸入 :wq 儲存退出

5.重啟php-fpm進程

/etc/init.d/php-fpm restart

這樣就成功了,如果不放心,建立一個php檔案,命名為 mail.php ,可以使用下面代碼測試下。

<?php

$txt = "hello,you are a good boy!"; 

// 以下的郵箱地址改成你的

$mail = 'somebody@example.com'; 

// 發送郵件

mail($mail, "My subject", $txt); 

echo 'message was sent!'; 

?>
儲存並上傳至你的網站根目錄,並在瀏覽器運行:

http://你的網址/mail.php

到時候你的郵箱就應該能收到郵件了,不過基本都在垃圾郵件裡面,注意查看,如果收不到郵件的話,檢查在操作過程時候正常,有木有重啟sendmail或者重啟php。一般來說,就能正常收到郵件了。

當然,功能是實現了,不過用上面的測試代碼測試的時候,發現成功發一封郵件很慢很慢,要好幾十秒甚至一分鐘的時候。然後我在部落格中發表或者回複評論的也是異常的慢,超過了使用者等待的心理期限。最佳化這個效率勢在必行了,不然只能砍掉這個功能。

網上方法很多很多,修改這個檔案又是修改那個檔案,感覺比較麻煩,於是找個了操作最少的修改,然後成功了。

修改/etc/hosts ,未修改之前

127.0.0.1 localhost.localdomain localhost

修改成

127.0.0.1 localhost.localdomain localhost 主機名稱

查看原生主機名稱的命令是: hostname

完成修改之後重啟下sendmail

service sendmail restart

此致,發表評論又回複到了幾秒完成發表成功了。大家發表評論的時候看看相比慢不慢,同時能不能收到評論回複的通知訊息,感謝大家。

本文參考了 LNMP筆記:解決mail函數不能發送郵件 和 解決sendmail啟動慢的問題 文章內容。

方法二,如果不用sendmail可以嘗試使用postfix發郵件


自從又使用上了軍哥的lnmp環境後,lnmp下mail函數不能發送郵件的問題依然是出現的,在這裡,我不建議大家使用sendmail作為發信,理由就是效率低,速度慢,所以,一上來就得把他卸載了,這裡我就直接說教程了,不墨跡!

yum remove sendmail 

然後就開始安裝Postfix了,這相對與sendmail要效率高很多,發信速度快,佔用記憶體低,可以說是目前伺服器發信首選,當然也有很多大神會說smtp也不錯,那也沒錯,但個人愛好,我就喜歡伺服器發信的簡單!

安裝 Postfix

yum install postfix 

更改預設MTA為Postfix:

/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix 

完事兒,再次檢查下是否將MTA改為Postfix了:

alternatives --display mta 

配置Postfix,vi編輯main.cf

vi /etc/postfix/main.cf 

開啟後分別找到以下幾項,將其前面的#去掉,並做配置:

myhostname = mail.2zzt.com 
mydomain = 2zzt.com 
myorigin = $mydomain 
inet_interfaces = all 
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain 
mynetworks = 192.168.100.10/28, 127.0.0.0/8 
relay_domains = 
home_mailbox = Maildir/ 

在這裡我會給出main.cf的完整檔案,省的大夥改錯的,大家只需將main.cf檔案裡的2zzt.com替換為你們自己的網域名稱即可OK了

 

不喜歡vi線上編輯的,可以直接下載main.cf上傳到伺服器的/etc/postfix/main.cf進行替換吧

檢測並啟動Postfix

service postfix status
 
//若未啟動,執行以下命令:

service postfix start 

設定開機啟動

chkconfig postfix on 

到這一步Postfix算是OK了,但我們還是得到php.in裡配置下sendmail的絕對路徑!

使用命令開啟編輯php.ini

vi /usr/local/php/etc/php.ini 

輸入?sendmail_path 尋找定位(或者手動跳轉找到sendmail_path),你會發現預設是下面的代碼

;sendmail_path = 

按 i 進入編輯,將這行修改為

sendmail_path = /usr/sbin/sendmail -t -i 

按 Esc 鍵退出編輯,輸入 :wq 儲存退出

重啟php-fpm進程

/etc/init.d/php-fpm restart 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.