如下代碼為用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的時候,就會輸出類似于此連接配接過程的東西。