使用php發(fā)送有附件的電子郵件-(PHPMailer使用的實(shí)例分析)
/*PHPMailer是一個(gè)用于發(fā)送電子郵件的PHP函數(shù)包。它提供的功能包括:
*.在發(fā)送郵時(shí)指定多個(gè)收件人,抄送地址,暗送地址和回復(fù)地址
*.支持多種郵件編碼包括:8bit,base64,binary和quoted-printable
*.支持SMTP驗(yàn)證
*.支持冗余SMTP服務(wù)器
*.支持帶附件的郵件和Html格式的郵件
*.自定義郵件頭
*.支持在郵件中嵌入圖片
*.調(diào)試靈活
*.經(jīng)測試兼容的SMTP服務(wù)器包括:Sendmail,qmail,Postfix,Imail,Exchange等
*.可運(yùn)行在任何平臺(tái)之上
phpMailer是一個(gè)非常強(qiáng)大的php發(fā)送郵件類,可以設(shè)定發(fā)送郵件地址、回復(fù)地址、郵件主題、富文本內(nèi)容,上傳附件,.....
官方網(wǎng)站:http://phpmailer.worxware.com/
下載地址:http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list
*/
require_once('include/PHPMailer/class.phpmailer.php'); //導(dǎo)入PHPMAILER類
$mail = new PHPMailer(); //創(chuàng)建實(shí)例
$mail -> CharSet='utf-8'; //設(shè)置字符集
$mail -> SetLanguage('ch','include/PHPMailer/language/'); //設(shè)置語言類型和語言文件所在目錄
$mail -> IsSMTP(); //使用SMTP方式發(fā)送
$mail -> SMTPAuth = true; //設(shè)置服務(wù)器是否需要SMTP身份驗(yàn)證
$mail -> Host = SMTP_SERVER; //SMTP 主機(jī)地址
$mail -> Port = SMTP_SERVER_PORT; //SMTP 主機(jī)端口
$mail -> From = SMTP_USER_MAIL; //發(fā)件人EMAIL地址
$mail -> FromName = 'jasonxu'; //發(fā)件人在SMTP主機(jī)中的用戶名
$mail -> Username = SMTP_USER_NAME; //發(fā)件人的姓名
$mail -> Password = SMTP_USER_PASS; //發(fā)件人在SMTP主機(jī)中的密碼
$mail -> Subject = '測試郵件的標(biāo)題'; //郵件主題
$mail -> AltBody = 'text/html'; //設(shè)置在郵件正文不支持HTML時(shí)的備用顯示
$mail -> Body = '測試郵件的內(nèi)容';//郵件內(nèi)容做成
$mail -> IsHTML(true); //是否是HTML郵件
$mail -> AddAddress('chinajason2008#gmail.com','jasonxu'); //收件人的地址和姓名
$mail -> AddReplyTo('chinajason2008#gmail.com','jasonxu'); //收件人回復(fù)時(shí)回復(fù)給的地址和姓名
$mail -> AddAttachment('include/id.csv','att.csv');//附件的路徑和附件名稱
if(!$mail -> Send()) //發(fā)送郵件
var_dump($mail -> ErrorInfo); //查看發(fā)送的錯(cuò)誤信息
注意:phpmailer如果添加附件的時(shí)候,在附件名稱里一定要寫明附件的后綴,如果不寫明附件后綴,默認(rèn)的附件后綴會(huì)是.txt。
比如$mail -> AddAttachment('include/id.csv','att');//附件的路徑和附件名稱
如果向上面一樣添加附件發(fā)送,則最終接到的附件可能是att.txt。
AddAttachment可以設(shè)置附件編碼方式和附件類型,比如上面的附件添加也可以設(shè)置為
$mail -> AddAttachment('include/id.csv','att.csv',"binary","text/comma-separated-values");//附件的路徑和附件名稱、
附件的編碼方式大概有這么幾種:支持8bit, base64, binary, and quoted-printable 編碼
而CSV可接受的MIME Type
· application/octet-stream
· text/comma-separated-values(推薦)
· text/csv
所以,csv格式文件的附件類型可以是上面三種中的任意一種
以前項(xiàng)目中郵件發(fā)送的一個(gè)實(shí)例,整理個(gè)縮略版,方便套用:
$body=$_smtp_body;
$mail=new PHPMailer();//得到一個(gè)PHPMailer實(shí)例
//$mail->SMTPSecure='tls';
$mail->CharSet="utf-8"; //設(shè)置編碼
$mail->IsSMTP();//設(shè)置采用SMTP方式發(fā)送郵件
$mail->Host=$_smtp_server;//設(shè)置SMTP郵件服務(wù)器的地址
$mail->Port=$_smtp_port;//設(shè)置郵件服務(wù)器的端口,默認(rèn)為25
$mail->From=$_smtp_from_mail; //設(shè)置發(fā)件人的郵箱地址
$mail->FromName=$_smtp_from_name;//設(shè)置發(fā)件人的姓名
$mail->Username=$_smtp_username;
$mail->Password=$_smtp_password;
$mail->AddAddress("$email","");//設(shè)置收件的地址(參數(shù)1)和姓名(參數(shù)2)
$mail->SMTPAuth=true;//開啟SMTP認(rèn)證
$mail->Subject=$_smtp_subject;//設(shè)置郵件的標(biāo)題
//$mail->AltBody="text/html";
$mail->Body=$body;//郵件內(nèi)容
$mail->IsHTML(true);//設(shè)置內(nèi)容是否為html類型
//$mail->WordWrap=50; //設(shè)置每行的字符數(shù)
//$mail->AddReplyTo("samzhang@tencent.com","samzhang"); //設(shè)置回復(fù)的收件人的地址
$mail->SMTPDebug=0;
if($mail->Send()){//發(fā)送郵件
exit 'ok';
}else{
exit 'fail';
}
大概記得以前初次使用PHPMailer的時(shí)候,出現(xiàn)過莫名奇妙的問題,也在網(wǎng)上花了不少時(shí)間找資料,最終才得以解決。目前記得服務(wù)器PHP環(huán)境不能禁止fsockopen函數(shù),否則郵件發(fā)送不了,但也有解決的辦法??傊?,一開始使用,總有不順,由于時(shí)間久遠(yuǎn),現(xiàn)在想來,也不知道具體改了什么。所以,將現(xiàn)在正在使用的PHPMailer目錄文件打包上傳到CSDN,也為方便以后使用吧,同時(shí)也方便為此事煩惱的朋友。PHPMailer下載:http://xiazai.jb51.net/201304/yuanma/PHPMailer_jb51net.rar
另外,將當(dāng)時(shí)出現(xiàn)的問題所收錄的內(nèi)容整理如下:
1、Error: Could not connect to SMTP host
原因1:不郵郵件系統(tǒng)要求的smtp請求不同一,但是都允許大寫,有些不支持小寫,比如網(wǎng)易,騰訊的郵箱。(至于是不是這樣,我沒測試過,反正都改為大寫,也不影響)
解決方法:
public function IsSMTP() {
$this->Mailer ='SMTP'; // 將smtp ->SMTP ;即原來是小寫,現(xiàn)在大寫。
}
// Choose the mailer and send through it
switch($this->Mailer) {
case 'sendmail':
return $this->SendmailSend($header, $body);
case 'SMTP'://同樣 將smtp ->SMTP ;即原來是小寫,現(xiàn)在大寫。
return $this->SmtpSend($header, $body);
case 'mail':
default:
return $this->MailSend($header, $body);
}
2、SMTP Error: Could not connect to SMTP host
原因:有的虛擬主機(jī),或服務(wù)器,為了安全起見屏蔽了“fsockopen()函數(shù)”導(dǎo)致無法發(fā)送郵件
解決方法:
啟用fsockopen函數(shù)
首先,在php.ini中去掉下面的兩個(gè)分號(hào)
;extension=php_sockets.dll
;extension=php_openssl.dll
替換fsockopen函數(shù)
可以將class.smtp.php文件中fsockopen函數(shù)換成pfsockopen函數(shù)
3、Could not instantiate mail function
原因:
設(shè)置的參數(shù)不正確,我使用了gmail做一些基本測試,需要在次設(shè)置其他參數(shù)。
解決方法:
$mail->SMTPSecure = ‘tls'; //只需要加上這句
注:這種錯(cuò)誤我沒碰到過,所以在上面的例子中,這個(gè)內(nèi)容我是加了注釋的。如果碰到這種錯(cuò)誤的,可以使用這句試試。
相關(guān)文章
php+webSoket實(shí)現(xiàn)聊天室示例代碼(附源碼)
本篇文章主要介紹了php+webSoket搭建chatServer示例(附源碼)的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-02-02Laravel框架實(shí)現(xiàn)的上傳圖片到七牛功能詳解
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)的上傳圖片到七牛功能,結(jié)合實(shí)例形式詳細(xì)分析了七牛擴(kuò)展包相關(guān)安裝、配置及操作Laravel上傳圖片到七牛的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-09-09ThinkPHP框架實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù)的兩種方法分析
這篇文章主要介紹了ThinkPHP框架實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù)的兩種方法,結(jié)合實(shí)例形式分析了2種被動(dòng)執(zhí)行定時(shí)任務(wù)的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-09-09destoon文章模塊調(diào)用企業(yè)會(huì)員資料的方法
這篇文章主要介紹了destoon文章模塊調(diào)用企業(yè)會(huì)員資料的方法,非常實(shí)用的一個(gè)技巧,需要的朋友可以參考下2014-08-08php mysql_real_escape_string addslashes及mysql綁定參數(shù)防SQL注入攻擊
這篇文章主要介紹了php mysql_real_escape_string addslashes及mysql綁定參數(shù)防SQL注入攻擊的相關(guān)資料,需要的朋友可以參考下2016-12-12實(shí)現(xiàn)獲取http內(nèi)容的php函數(shù)分享
這篇文章主要介紹了實(shí)現(xiàn)獲取http內(nèi)容的php函數(shù),現(xiàn)在分享給大家,需要的朋友可以看一下2014-02-02Zend Framework生成驗(yàn)證碼并實(shí)現(xiàn)驗(yàn)證碼驗(yàn)證功能(附demo源碼下載)
這篇文章主要介紹了Zend Framework生成驗(yàn)證碼并實(shí)現(xiàn)驗(yàn)證碼驗(yàn)證功能,較為詳細(xì)的分析講述了Zend Framework實(shí)現(xiàn)操作驗(yàn)證碼操作的具體步驟與相關(guān)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-03-03laravel框架中表單請求類型和CSRF防護(hù)實(shí)例分析
這篇文章主要介紹了laravel框架中表單請求類型和CSRF防護(hù),結(jié)合實(shí)例形式分析了laravel框架常見請求方法、提交請求以及csrf令牌的驗(yàn)證相關(guān)操作技巧,需要的朋友可以參考下2019-11-11