SMTP
由於PHP沒有提供現成的smtp函數,卻提供了一個功能不甚靈活的mail()函數,這個函數需要伺服器配置上的支援,並且不支援smtp驗證,在很多場合無法正常的工作,因此不建議使用。本文的目的在於為新手指明方向,並沒有涉及那些進階的內容,一來本身水平有限,二來也擔心不能準確的講述相關的概念,進而對各位造成誤導,還請自行深入學習。
“使用php發送mail”最近已經成為繼“register_globals”以後本版第二個新手陷阱,今天特地寫這篇文章為新手解惑,希望可以為迷茫的人指明方向。
讓我們先從以下這個例子開始說起:
引用:
[root@server~/]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.domain.com.br ESMTP Postfix (2.1.0)
MAIL FROM: teste@dominio.com.br
250 Ok
RCPT TO: teste@dominio.com.br
250 Ok
DATA
354 End data with .
teste
.
250 Ok: queued as 7B41F4665A
QUIT
221 Bye
Connection closed by foreign host.
註:以上來自netkiller的postfix文檔,偷懶,直接用現成的。
首先是使用telnet來串連本地的25連接埠,稍微熟悉點網路的人都知道smtp協議使用25連接埠,這也就是說,現在在串連本地的smtp伺服器。
引用:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.domain.com.br ESMTP Postfix (2.1.0)
這些東西是系統輸出資訊,說明已經串連上了,而且這個smtp伺服器是postfix做的。
“MAIL FROM: teste@dominio.com.br”這個命令指明了發件地址是teste@dominio.com.br,“250 Ok”說明這條命令被伺服器接受並正確執行,這類似http協議的200、404、500等狀態碼。接下來的“RCPT TO: teste@dominio.com.br”指明了收件地址是teste@dominio.com.br。
引用:
DATA
354 End data with .
teste
.
這一段是輸入郵件內文,輸入“DATA”以後系統提示使用“<斷行符號>.<斷行符號>”來結束輸入,本文內容是“teste”。
最後使用“QUIT”退出。