php郵件發送的兩種方式_php技巧

來源:互聯網
上載者:User

這篇文章研究的主要內容就是使用PHP來寄送電子郵件,總結為以下兩種方法:

一、使用PHP內建的mail()函數

<?php $to = "test@163.com"; //收件者 $subject = "Test"; //主題 $message = "This is a test mail!"; //本文 mail($to,$subject,$message); 

結果就直接報錯,如下:

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() inD:/www/Zend/email/email.php on line 10

分析原因:本地需要有SMTP伺服器,又改了下代碼:

<?php $to = "test@163.com";//收件者 $subject = "Test";//郵件主題 $message = "This is a test mail!";//郵件內文 ini_set('SMTP','smtp.163.com');//發件SMTP伺服器 ini_set('smtp_port',25);//發件SMTP伺服器連接埠 ini_set('sendmail_from',"admin@163.com");//寄件者郵箱 mail($to,$subject,$message); 

結果還是錯誤:

Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line 9

 

分析原因:需要驗證資訊,怎麼寫驗證資訊呢?在哪裡配置呢?帶著這些疑問參考一些技術文章後得出結論,使用mail()函數發送郵件就必須要有一台無需SMTP驗證就可以發信的郵件伺服器。但現在的SMTP郵件伺服器基本上都是需要驗證的,所以要想使用它發郵件就只能自己在本地搭一個不需要驗證的SMTP伺服器。搭建方法:用windows內建的IIS就可以,或者從網上下載其他的SMTP伺服器軟體。

結論:使用mail()函數發送郵件,就必須要有一台不需要驗證的SMTP伺服器。這樣的話配置工作會多一點,但是使用的時候就比較省事了,幾行代碼就可以。

二、使用封裝SMTP協議的郵件類

這種方法就比較常見了,尤其對於廣大自己沒有伺服器,從網上購買虛擬機器主機的同學,第一種方法不現實,所以還是自己使用SMTP協議來發送郵件吧。

不過要完成這項工作的話,就需要你對SMTP協議有一定的瞭解,喜歡事必躬親的同學可以自己動手寫一個,喜歡拿來主義的同學就可以從網上下載了,有很多。

不過我比較推薦使用PEAR擴充中的Mail類功能強大:可以支援純文字、HTML格式的郵件;各欄位都可設定編碼,正確配置不會出現中文亂碼情況;可以支援附件等等。

在伺服器可以使用pear install Mail 命令快速安裝,沒有足夠伺服器許可權的同學也可以直接下載類的PHP源碼包含進來就可以了。

註:Mail類依賴  Net/SMTP.php  和 Mail/mime.php ,要一塊下載,使用時一塊包含進來。

下面我舉例說明一下在Mail類發送郵件的方法吧,網上其他SMTP郵件類使用方法一塊也類似,可以參考:

<?php  // Pear Mail 擴充 require_once('Mail.php'); require_once('Mail/mime.php'); require_once('Net/SMTP.php');  $smtpinfo = array(); $smtpinfo["host"] = "smtp.163.com";//SMTP伺服器 $smtpinfo["port"] = "25"; //SMTP伺服器連接埠 $smtpinfo["username"] = "username@163.com"; //寄件者郵箱 $smtpinfo["password"] = "password";//寄件者郵箱密碼 $smtpinfo["timeout"] = 10;//網路逾時時間,秒 $smtpinfo["auth"] = true;//登入驗證 //$smtpinfo["debug"] = true;//偵錯模式  // 收件者清單 $mailAddr = array('receiver@163.com');  // 寄件者顯示資訊 $from = "Name <username@163.com>";  // 收件者顯示資訊 $to = implode(',',$mailAddr);  // 郵件標題 $subject = "這是一封測試郵件";  // 郵件內文 $content = "<h3>隨便寫點什麼</h3>";  // 郵件內文類型,格式和編碼 $contentType = "text/html; charset=utf-8";  //分行符號號 Linux: \n Windows: \r\n $crlf = "\n"; $mime = new Mail_mime($crlf); $mime->setHTMLBody($content);  $param['text_charset'] = 'utf-8'; $param['html_charset'] = 'utf-8'; $param['head_charset'] = 'utf-8'; $body = $mime->get($param);  $headers = array(); $headers["From"] = $from; $headers["To"] = $to; $headers["Subject"] = $subject; $headers["Content-Type"] = $contentType; $headers = $mime->headers($headers);  $smtp =& Mail::factory("smtp", $smtpinfo);   $mail = $smtp->send($mailAddr, $headers, $body); $smtp->disconnect();  if (PEAR::isError($mail)) {   //發送失敗   echo 'Email sending failed: ' . $mail->getMessage()."\n"; } else{   //發送成功   echo "success!\n"; } 

如果從網上找的SMTP類都是高度封裝的,所以使用起來比上面會更簡單,但使用方法都是比較相似的。

結論:這種方式發送郵件無需裝任何軟體,只需要包含進來一個PHP類,然後多寫幾行配置代碼,就可以了。並且網上有很多樣本的代碼,很多時候只要複製過來然後修改個別的幾個參數就可以用了,所以會很方便,推薦使用此方法。

以上就是使用PHP發送郵件的兩種方法,有自己的思考過程,希望對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.