天天看點

如何用Net::SMTP發送郵件

如下代碼為用163.com的SMTP來發送郵件。

為什麼要 $stmp->auth('user','pass');

大部分SMTP伺服器為了防止 spam /垃圾郵件,就需要使用者驗證身份。

此方法需要另外安裝子產品:Authen::SASL, 此子產品可能系統不自帶。

Debug => 1

此段代碼用于測試之用,是以開啟了Debug,一般測試一次完畢,正式使用的話會關閉它。

需要注意的是發信人和收信人的位址要用單引号,或者用"fayland/@gmail.com"。如果是個變量,需要用正則先将其轉換。

我想發送附件,該如何做?

參考《Perl網絡程式設計》。

SMTP協定由文檔rfc821定義。

在rfc821協定中定義了兩個角色,即發送者(用S表示,指發送郵件的程式)和接收者(用R表示,指SMTP伺服器)。

在 S 和 R 通過套接連接配接後,S應當先向R表明身份,此過程用helo指令完成,helo後連接配接發送者的域名(可用localhost)。而R的回答是一個表示連接配接成功的狀态碼和伺服器身份等。例如:

在rfc821定義的狀态碼中,通常以2或3開頭的表示成功,以4或5開頭的表示傳輸過程出現了問題。

如果是需要伺服器身份驗證的話,還用發送AUTH LOGIN。

發送頭檔案。

這裡的recipient的位址如果是在SMTP同一伺服器上且伺服器找不到此位址,就會回答"550 No such user here"。

發送正文。以DATA開始。以兩個換行結束。

退出連接配接。

以上就是簡易的連接配接過程。當開啟Net::SMTP的debug的時候,就會輸出類似于此連接配接過程的東西。