因為需要測試php的mail函式,在windows下的sendmail並沒辦法使用。
而xampp的MercuryMail設定,若僅是測試又嫌麻煩,於是爬了文並實際使用,經過測試可行了,紀錄如下:

照例關鍵字:xampp、php、mail()、gmail、smtp、stunnel、windows環境


xampp不贅述了,看倌請自行下載。
首先先下載 stunnel,此篇運行時版本為4.27,點此下載

運作原理
xampp在windows下apache並不能直接使用mail()函式,必須藉由xampp內帶的sendmail.exe模擬sendmail函式。
當設定好sendmail的相關設置後,一般就可以透過本身ISP業者提供的smtp進行郵件發送。
但gmail必須使用SSL安全連線方式登入後才可連入smtp寄送,於是使用stunnel,讓它來代理SSL連線。
而設置好後,xampp的sendmail.exe透過stunnel以SSL模式連入gmail的smtp伺服器,sendmail就能夠使用gmail的smtp進行郵件的發送了。
而xampp的apche就能夠透過sendmail.exe來運行php的mail()函式,而不用在架設郵件伺服器。


相關設定

apache
php.ini 檔,位置在 \xampp\apache\bin\php.ini

約700多行
SMTP = localhost
smtp_port = 25
sendmail_from = sample@gamil.com ← 改為寄信者的郵件

sendmail_path = "D:\xampp\sendmail\sendmail.exe -t" ← 路徑必須設定對

另外約在636行
extension=php_openssl.dll ← 將openssl啟動

/*---------------------------------------*/

sendmail
sendmail.ini 檔,位置在D:\xampp\sendmail\sendmail
若原本是註解(前面有分號;),就把前面的;拿掉,讓其執行。

smtp_server=localhost
smtp_port=25
default_domain=gmail.com
error_logfile=error.log

約在27行
auth_username=sample@gmail.com ← gmail信箱
auth_password=password ← 輸入你的gmail密碼

約41行
force_sender=sample@gmail.com ← gmail信箱

/*---------------------------------------*/

stunnel
stunnel.conf 檔,位置在 C:\Program Files\stunnel\stunnel.conf
原本是註解的就拿掉分號,取消註解。

cert = stunnel.pem
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
debug = 7
output = stunnel.log
client = yes

[ssmtp]
accept = 127.0.0.1:25
connect = smtp.gmail.com:465



上面都設定好了以後,記得gmail必須打開POP功能
開啟方式為:進入gmail,右上角設定 → 轉寄和POP/IMAP → POP下載 啟用POP功能 即可。
而apache重新啟動以後,就可以透過php的mail()函式進行郵件發送囉。


以上
心得紀錄

參考文件:http://www.projectpier.org/node/817http://zcdxzsz.javaeye.com/blog/254098

"http://img.zemanta.com/pixy.gif?x-id=80ab957a-8083-877d-9e8f-705e09923370" alt="" />

創作者介紹
創作者 ezcshi 的頭像
ezcshi

一陣嘻,噓!

ezcshi 發表在 痞客邦 留言(15) 人氣()


留言列表 (15)

發表留言
  • JAY
  • it didnt work~~!!!
    but thx anyway!
  • 內文未改過,今天環境重置照此步驟設定(Stunnel使用4.29版),僅在php.ini無extension=php_openssl.dll此模組可加載外,其餘全部設定後可正確寄信。

    請JAY確認php函式是否有使用正確,或是有地方未照步驟執行。

    另外php.ini的路徑 sendmail_path = "\xampp\sendmail\sendmail.exe -t" 使用相對路徑即可,不一定要使用絕對路徑。


    下面提供簡單php mail函式小程式供測試

    <?PHP
    $to = "abcABC .com";
    $subject = "test";
    $msg = "I completely understand SMTP servers now!";
    $headers = "From: youryour .com";

    if(mail("$to", "$subject", "$msg", "$headers"))
    echo "success";
    else
    echo "ERROR!!";
    ?>

    ezcshi 於 2010/01/09 15:56 回覆

  • 路過
  • 我按照上方使用一便,除了沒有extension=php_openssl.dll此模組
    還有"sendmail"裡面的內容與上面完全不一樣呢,請問您使用的XAMPP版本是什麼
    以上問題讓我不解
    請大大解惑~~
  • lanc
  • 當時測試版本為
    PHP5.24
    MySQL 5.0.45
    另外我xampp都用免安裝版,目前xampp官網無法連上。
    測試海芋小站的1.7.3免安裝,看了sendmail,真的變動了不少。

    # Mercury
    account Mercury
    host localhost
    port 25
    from [exampleuser]gmail .com
    auth on
    user [exampleuser]gmail .com
    password [examplepassword]

    似乎這版本設定上直接可以指定用本機寄或是掛免費信箱的smtp寄信。
    但因為gmail要安全連線才能登入,所以要裝stunnel。
    sendmail.ini 照著上面 # Mercury 以後貼上吧。
    port 25本來沒有,不確定不加入會不會自動撈寄信埠,所以就先加入吧。

    新版本應該是改成這樣,你試試。
    感謝你的提問~不然都不曉得sendmail設定有變了。

    以上


  • lanc
  • 補充:exampleuser、examplepassword改為你的gmail帳號密碼。
  • 路過
  • 謝謝大大的解釋,我已找到相關解決辦法了。
  • 路過
  • 不過大大我雖然找到另外解決辦法,在此我還想請問您,
    原用Appserv架設一個網站,改用xampp架設會找不到
    OPNESSL.dll組件的問題,這問題您是如何解決。
  • lanc
  • xampp要開啟openSSL先找到php.ini,在檔案裡面找到 ;extension=php_openssl.dll
    將前面的;拿掉,儲存後重新啟動apache應該就可以了。
    試試看吧
  • 路過
  • 重點來了~
    我在xampp官方下載到的 它裡面確實沒有
    ;extension=php_openssl.dll 這個組件
    就好比Appserv2.4.9裡面有的
    extension=php_iconv_dll 組件
    在Appserv 2.5.10裡面確實是找不到的喔
    不知xampp是否也是有相關問題,因版本不同組件支援也有所不同
    出自好奇,莫怪唷~.~"
  • lanc
  • 這一篇文章你可以參考看看。
    http://yogo.blog.ithome.com.tw/post/3214/63096

    這種整合好環境的當然會因為出的版本不同而增減組件。
    因為伺服器裝上後穩定就不太會去更動,所以不會頻繁的進行版本追蹤。
    若真的沒有需要的組件的話,僅能自行加載了。

    以上
  • Kelvin Lee
  • 設定後仍然無法寄出電郵。
    stunnel 使用 4.56 版本,已按照上述方式進行設定,打開 stunnel 時卻一直顯示

    ---------------------------
    stunnel 4.56 on Win32 (invalid stunnel.conf)
    ---------------------------
    Stunnel server is down due to an error.
    You need to exit and correct the problem.
    Click OK to see the error log window.
    ---------------------------
    確定
    ---------------------------

    錯誤紀錄為:
    Reading configuration from file stunnel.conf
    FIPS mode is enabled
    Compression not enabled
    Snagged 64 random bytes from C:/.rnd
    Wrote 0 new random bytes to C:/.rnd
    PRNG seeded successfully
    Initializing service [ssmtp]
    Certificate: stunnel.pem
    Certificate loaded
    Key file: stunnel.pem
    Private key loaded
    SSL options set: 0x01000004
    Configuration successful
    Service [ssmtp] (FD=484) bound to 127.0.0.1:25
    Cannot open log file: stunnel.log
    Closing service [ssmtp]
    Service [ssmtp] closed (FD=484)
    Sessions cached before flush: 0
    Sessions cached after flush: 0
    Service [ssmtp] closed

    Server is down

    請問如何解決? 謝謝!
  • lanc
  • 錯誤訊息 Cannot open log file: stunnel.log

    看一下C:\Program Files\stunnel\stunnel.conf的
    output的檔案是否存在。
    另外需要注意是否為32/64位元作業系統不同路徑(32位元程式放在Program Files (x86))導致預設路徑出錯。

    你可以朝這個方向試試。


  • Connie
  • 不好意思,想請問您在我的xampp中並沒有看到sendmail.ini這個檔案,也無sendmail資料夾,是否可利用mailtodisk來做呢?
    測試過很多其他的像是gmail的phpmailer都顯示找不到smtp,是代表我的虛擬機沒辦法使用寄信功能嗎?
    先謝謝您了困擾我好多天了!
  • Lanc
  • Hi Connie,

    你的虛擬主機是linux的嗎?
    一般虛擬主機應該是你可以全部控制,所以都送不出去可能把錯誤訊息貼上來,比較好判斷喔。

  • Connie
  • 您好,我使用的是學校的windows電腦的虛擬機(不知道您是不是這個意思),試過學校的smtp但會擋信所以朝gmail方向做,我試過幾個檔案有些會在按送出後顯示空白頁面(應該會顯示傳送成功或失敗,也無收到信),其中一個錯誤訊息如下
    SMTP -> FROM SERVER: 220 smtp.gmail.com ESMTP dc8sm10785186pdb.23 - gsmtp SMTP -> FROM SERVER: 250-smtp.gmail.com at your service, [140.135.113.75] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 SMTP -> ERROR: Password not accepted from server: 534-5.7.14 Please log in via your web browser and 534-5.7.14 then try again. 534-5.7.14 Learn more at 534 5.7.14 https://support.google.com/mail/answer/78754 dc8sm10785186pdb.23 - gsmtp SMTP -> FROM SERVER: 250 2.1.5 Flushed dc8sm10785186pdb.23 - gsmtp Mailer Error: SMTP Error: Could not connect to SMTP host.
    我有將google帳號登入安全性調低,也從虛擬機登入過我的gmail帳號了
    不好意思麻煩您解答了
  • 婉婷
  • 您好,我再用stunnel.conf的時候出現一點問題想請教您~
    cert = stunnel.pem
    socket = l:TCP_NODELAY=1
    socket = r:TCP_NODELAY=1
    debug = 7
    output = stunnel.log
    client = yes

    [ssmtp]
    accept = 127.0.0.1:25
    connect = smtp.gmail.com:465

    1.我的該文件裡面找不到以下三行
    socket = l:TCP_NODELAY=1
    socket = r:TCP_NODELAY=1
    debug = 7
    2.還有就是我的虛擬主機是127.0.0.1:8000
    想請問accept = 127.0.0.1:25這個地方我一樣打25就可以了嗎??

    謝謝~