標籤:wordpress windows 虛擬機器主機 php程式 伺服器
兩種php發信方式
在許多php程式中通常都需要發郵件比如discuz需要選擇sendmail發信,wordpress評論回複需要發信,然而發送郵件則有兩種不同的方式。一是直接通過php中的mail()函數進行發信,而則是通過寫一些程式來通過stmp服務來進行發信。
前者需要程式所在伺服器的支援,通常linux伺服器大多有這項服務。比如之前我用的Godaddy主機就可以進行發信,但是國內主機服務商則基本不帶這個函數的支援。因為在這個垃圾郵件橫行霸道的年代,伺服器供應商則索性關閉這個函數的使用,所以大家很難可以調用mail()進行發信。具體測試大家可以調用<? php phpinfo(); ?>來查看自己的伺服器是否支援這個函數。
而後者雖然可以實現發郵件這個功能,但是需要自己寫相關程式帶調用stmp伺服器的使用。網上也有相關現成的程式可以直接拿來用。但是畢竟沒有mail()函數來的直接,來的快。虛擬機器主機使用者還是選擇stmp來進行發郵件的操作。如果是vps或者伺服器主機使用者則推薦使用第一種方式。
今天我講解下如何讓php 中的 mail()發揮作用。今天我們主要講解sendmail在windows的使用。
sendmail原本是unix系的軟體,在LAMP體系中有著良好的使用性。windows下實現這個的確有些難度,但是就像memcached一樣,總有牛人開發出了windows能用的版本。如果你是XAMPP套件的使用者就不需要下載,則把裡面的sendmail檔案夾複製到合適地方。否則需要到這個進行下載。
我放到的位置是D:/server/sendmail/ ,據說地址的長度不能太長,不然會有錯誤發生。接下來做兩步,來配置php和sendmail。
配置php.ini
[mail function]
SMTP = localhost
smtp_port = 25
sendmail_from = [email protected]
sendmail_path = "D:\sendmail\sendmail.exe -t"
預設狀態sendmail_path前面是有“;”的,我們需要去掉,然後在" "裡填寫sendmail.exe所在地址,之後再加一個參數-t。sendmail_from = ,這個貌似沒有什麼用,隨便填寫即可。
配置sendmail.ini
[sendmail]
smtp_server=smtp.qq.com
smtp_port=25
smtp_ssl=auto
error_logfile=error.log
debug_logfile=debug.log
auth_username=
auth_password=
pop3_server=
pop3_username=
pop3_password=
smtp_server=,這個需要填寫你想選用的smtp伺服器,可以選擇本地搭建(以後文章會講解),也可以選擇163、QQ、gmail(如果是gmail需要伺服器啟用ssl_module modules)的smtp或者pop3伺服器。注意第一次使用建議把debug_logfile=debug.log前面的;去掉,這樣可以記錄每次發送郵件的具體資訊了,如果發生錯誤可以在error.log裡面找到。auth_username=、auth_password=需要填寫你的stmp賬戶資訊(具體可以Google一下),如果是pop3則對應填寫。填寫一類就可以了。
測試
之後我們重啟apache後就可以正式生效了。我們用一個php程式測試一下是否生效。
<span style="color: #f00;"><?php</span><span style="color: #000-2;">$now</span> <span style="color: #000;">=</span> <span style="color: #@cm-word;">date</span>(<span style="color: #@cm-word;">“Y</span><span style="color: #000;">-</span><span style="color: #@cm-word;">m</span><span style="color: #000;">-</span><span style="color: #@cm-word;">d</span> <span style="color: #@cm-word;">h</span>:<span style="color: #@cm-word;">i</span>:<span style="color: #@cm-word;">s</span><span style="color: #@cm-word;">”</span>);<span style="color: #000-2;">$from_name</span> <span style="color: #000;">=</span> <span style="color: #@cm-word;">’</span><span style="color: #@cm-word;">測</span><span style="color: #@cm-word;">試sendmail</span><span style="color: #@cm-word;">’</span>;<span style="color: #000-2;">$from_email</span> <span style="color: #000;">=</span><span style="color: #000-2;">$headers</span> <span style="color: #000;">=</span> <span style="color: #@cm-word;">’From</span>: <span style="color: #000-2;">$from_name</span> <span style="color: #000;"><</span><span style="color: #000-2;">$from_email</span><span style="color: #000;">></span><span style="color: #@cm-word;">’</span>;<span style="color: #000-2;">$body</span> <span style="color: #000;">=</span> <span style="color: #@cm-word;">’</span><span style="color: #@cm-word;">這</span><span style="color: #@cm-word;">是</span><span style="color: #@cm-word;">一</span><span style="color: #@cm-word;">封</span><span style="color: #@cm-word;">來</span><span style="color: #@cm-word;">自</span> <span style="color: #000-2;">$from_name</span> <span style="color: #000;"><</span><span style="color: #000-2;">$from_email</span><span style="color: #000;">>的測試郵件</span>.<span style="color: #@cm-word;">’</span>;<span style="color: #000-2;">$subject</span> <span style="color: #000;">=</span> <span style="color: #@cm-word;">’</span>[<span style="color: #000-2;">$now</span>] 郵件<span style="color: #@cm-word;">測</span><span style="color: #@cm-word;">試</span><span style="color: #@cm-word;">’</span>;<span style="color: #00f;">if</span> (<span style="color: #@cm-word;">mail</span>(<span style="color: #000-2;">$to</span>, <span style="color: #000-2;">$subject</span>, <span style="color: #000-2;">$body</span>, <span style="color: #000-2;">$headers</span>)) {<span style="color: #00f;">echo</span> <span style="color: #@cm-word;">”success</span><span style="color: #000;">!</span><span style="color: #@cm-word;">”</span>;} <span style="color: #00f;">else</span> {<span style="color: #00f;">echo</span> <span style="color: #@cm-word;">”fail</span><span style="color: #@cm-word;">…</span><span style="color: #@cm-word;">”</span>;}<span style="color: #f00;">?></span>
如果發信成功則表明sendmail已經生效。如果沒有成功則要看看error.log、crash.log、debug.log相關錯誤提示來進行debug。
如果伺服器版本比較新,則可能不能使用這個sendmail程式,比如我遇到的錯誤是Message is missing sender‘s address,怎麼搜尋也沒有找到解決辦法,甚至沒找到類似的內容,這種情況下於是就果斷放棄了。轉而找到了一個新的方法,見明日文章《10秒種讓php mail()函數成功發郵件》
最後貼出crash.log內容,看看有高手能解決沒?
date/time : 2012-08-12, 00:38:16, 304ms
allocated memory : 3.90 MB
command line : D:\sendmail\sendmail.exe -t
executable : sendmail.exe
exec. date/time : 2011-06-18 01:10
compiled with : Delphi 2006/07
madExcept version : 3.0l
callstack crc : $e1790c4a, $e1790c4a, $e1790c4a
exception number : 1
exception class : Exception
exception message : Message is missing sender‘s address.
main thread ($6d8):
004b59c5 +b11 sendmail.exe sendmail 686 +204 initialization
thread $540:
7c957b67 +a ntdll.dll NtWaitForMultipleObjects
stack dump:
0012fe04 ca 59 4b 00 de fa ed 0e - 01 00 00 00 07 00 00 00 .YK.............
0012fe14 18 fe 12 00 ca 59 4b 00 - e0 4e aa 00 06 00 00 00 .....YK..N......
0012fe24 00 00 00 00 14 3f 41 00 - c0 ff 12 00 34 fe 12 00 .....?A.....4...
0012fe34 40 fe 12 00 c8 4b 40 00 - c0 ff 12 00 4c fe 12 00 @[email protected]
0012fe44 5f 4d 40 00 c0 ff 12 00 - b4 ff 12 00 c8 4b 40 00 [email protected]@.
0012fe54 c0 ff 12 00 00 00 00 00 - 00 00 00 00 00 e0 fd 7f ................
0012fe64 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012fe74 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012fe84 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012fe94 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012fea4 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012feb4 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012fec4 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012fed4 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012fee4 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012fef4 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012ff04 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012ff14 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012ff24 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012ff34 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
disassembling:
[...]
004b59b2 jnz loc_4b59ca
004b59b4 686 mov ecx, $4b6bc8 ; ‘Message is missing sender‘s address‘
004b59b9 mov dl, 1
004b59bb mov eax, [$4085b0]
004b59c0 call -$a8031 ($40d994) ; SysUtils.Exception.Create
004b59c5 > call -$b0cde ($404cec) ; [email protected]
004b59ca 687 cmp dword ptr [$4c3f48], 0
004b59d1 jnz loc_4b5a1f
004b59d3 mov eax, [$4c3f78]
004b59d8 mov eax, [eax+$98]
004b59de call -$a007f ($415964) ; Classes.TCollection.GetCount
[...]
Windows下配置Sendmail通過php mail函數發郵件
Windows下配置Sendmail通過php mail函數發郵件