php发送邮件教程,支持发送有附件的电子邮件-PHPMailer使用教程



  1. /*PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括: 
  2.   *.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址 
  3.   *.支持多种邮件编码包括:8bit,base64,binary和quoted-printable 
  4.   *.支持SMTP验证 
  5.   *.支持冗余SMTP服务器 
  6.   *.支持带附件的邮件和Html格式的邮件 
  7.   *.自定义邮件头 
  8.   *.支持在邮件中嵌入图片 
  9.   *.调试灵活 
  10.   *.经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等 
  11.   *.可运行在任何平台之上 
  12.   
  13. phpMailer是一个非常强大的php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、富文本内容,上传附件,..... 
  14. 官方网站:http://phpmailer.worxware.com/ 
  15. 下载地址:http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list 
  16. */   
  17. require_once('include/PHPMailer/class.phpmailer.php'); //导入PHPMAILER类  
  18. $mail = new PHPMailer(); //创建实例  
  19. $mail -> CharSet='utf-8'//设置字符集  
  20. $mail -> SetLanguage('ch','include/PHPMailer/language/');  //设置语言类型和语言文件所在目录            
  21. $mail -> IsSMTP(); //使用SMTP方式发送  
  22. $mail -> SMTPAuth = true; //设置服务器是否需要SMTP身份验证    
  23. $mail -> Host = SMTP_SERVER; //SMTP 主机地址    
  24. $mail -> Port = SMTP_SERVER_PORT; //SMTP 主机端口  
  25. $mail -> From = SMTP_USER_MAIL; //发件人EMAIL地址  
  26. $mail -> FromName = 'jasonxu'//发件人在SMTP主机中的用户名    
  27. $mail -> Username = SMTP_USER_NAME; //发件人的姓名    
  28. $mail -> Password = SMTP_USER_PASS; //发件人在SMTP主机中的密码    
  29. $mail -> Subject = '测试邮件的标题'//邮件主题    
  30. $mail -> AltBody = 'text/html'//设置在邮件正文不支持HTML时的备用显示  
  31. $mail -> Body = '测试邮件的内容';//邮件内容做成  
  32. $mail -> IsHTML(true);  //是否是HTML邮件  
  33. $mail -> AddAddress('chinajason2008#gmail.com','jasonxu'); //收件人的地址和姓名    
  34. $mail -> AddReplyTo('chinajason2008#gmail.com','jasonxu'); //收件人回复时回复给的地址和姓名  
  35. $mail -> AddAttachment('include/id.csv','att.csv');//附件的路径和附件名称  
  36. if(!$mail -> Send()) //发送邮件    
  37. var_dump($mail -> ErrorInfo);  //查看发送的错误信息  

注意:phpmailer如果添加附件的时候,在附件名称里一定要写明附件的后缀,如果不写明附件后缀,默认的附件后缀会是.txt。
比如$mail -> AddAttachment('include/id.csv','att');//附件的路径和附件名称
如果向上面一样添加附件发送,则最终接到的附件可能是att.txt。
AddAttachment可以设置附件编码方式和附件类型,比如上面的附件添加也可以设置为
$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格式文件的附件类型可以是上面三种中的任意一种

以前项目中邮件发送的一个实例,整理个缩略版,方便套用:

[php]  view plain copy
  1. $body=$_smtp_body;  
  2. $mail=new PHPMailer();//得到一个PHPMailer实例  
  3. //$mail->SMTPSecure='tls';  
  4. $mail->CharSet="utf-8"//设置编码  
  5. $mail->IsSMTP();//设置采用SMTP方式发送邮件  
  6. $mail->Host=$_smtp_server;//设置SMTP邮件服务器的地址  
  7. $mail->Port=$_smtp_port;//设置邮件服务器的端口,默认为25  
  8. $mail->From=$_smtp_from_mail//设置发件人的邮箱地址  
  9. $mail->FromName=$_smtp_from_name;//设置发件人的姓名  
  10. $mail->Username=$_smtp_username;  
  11. $mail->Password=$_smtp_password;  
  12. $mail->AddAddress("$email","");//设置收件的地址(参数1)和姓名(参数2)  
  13. $mail->SMTPAuth=true;//开启SMTP认证  
  14. $mail->Subject=$_smtp_subject;//设置邮件的标题  
  15. //$mail->AltBody="text/html";  
  16. $mail->Body=$body;//邮件内容  
  17. $mail->IsHTML(true);//设置内容是否为html类型  
  18. //$mail->WordWrap=50;                                 //设置每行的字符数  
  19. //$mail->AddReplyTo("samzhang@tencent.com","samzhang");     //设置回复的收件人的地址  
  20. $mail->SMTPDebug=0;  
  21. if($mail->Send()){//发送邮件  
  22.   exit 'ok';  
  23. }else{  
  24.   exit 'fail';  
  25. }  

大概记得以前初次使用PHPMailer的时候,出现过莫名奇妙的问题,也在网上花了不少时间找资料,最终才得以解决。目前记得服务器PHP环境不能禁止fsockopen函数,否则邮件发送不了,但也有解决的办法。总之,一开始使用,总有不顺,由于时间久远,现在想来,也不知道具体改了什么。所以,将现在正在使用的PHPMailer目录文件打包上传到CSDN,也为方便以后使用吧,同时也方便为此事烦恼的朋友。PHPMailer下载:http://download.csdn.net/detail/zm2714/4578320

另外,将当时出现的问题所收录的内容整理如下:

1、Error: Could not connect to SMTP host

原因1:不邮邮件系统要求的smtp请求不同一,但是都允许大写,有些不支持小写,比如网易,腾讯的邮箱。(至于是不是这样,我没测试过,反正都改为大写,也不影响)

解决方法:

[php]  view plain copy
  1. public function IsSMTP() {  
  2.   $this->Mailer ='SMTP'// 将smtp ->SMTP ;即原来是小写,现在大写。  
  3. }  
  4.   
  5. // Choose the mailer and send through it  
  6. switch($this->Mailer) {  
  7.   case 'sendmail':  
  8.     return $this->SendmailSend($header$body);  
  9.   case 'SMTP'://同样 将smtp ->SMTP ;即原来是小写,现在大写。  
  10.     return $this->SmtpSend($header$body);  
  11.   case 'mail':  
  12.   default:  
  13.     return $this->MailSend($header$body);  
  14. }  

2、SMTP Error: Could not connect to SMTP host

原因:有的虚拟主机,或服务器,为了安全起见屏蔽了“fsockopen()函数”导致无法发送邮件

解决方法:

启用fsockopen函数

首先,在php.ini中去掉下面的两个分号

;extension=php_sockets.dll

;extension=php_openssl.dll

 替换fsockopen函数

可以将class.smtp.php文件中fsockopen函数换成pfsockopen函数

3、Could not instantiate mail function

原因:

设置的参数不正确,我使用了gmail做一些基本测试,需要在次设置其他参数。

解决方法:

$mail->SMTPSecure = ‘tls’; //只需要加上这句

注:这种错误我没碰到过,所以在上面的例子中,这个内容我是加了注释的。如果碰到这种错误的,可以使用这句试试。

  1. /*PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括: 
  2.   *.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址 
  3.   *.支持多种邮件编码包括:8bit,base64,binary和quoted-printable 
  4.   *.支持SMTP验证 
  5.   *.支持冗余SMTP服务器 
  6.   *.支持带附件的邮件和Html格式的邮件 
  7.   *.自定义邮件头 
  8.   *.支持在邮件中嵌入图片 
  9.   *.调试灵活 
  10.   *.经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等 
  11.   *.可运行在任何平台之上 
  12.   
  13. phpMailer是一个非常强大的php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、富文本内容,上传附件,..... 
  14. 官方网站:http://phpmailer.worxware.com/ 
  15. 下载地址:http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list 
  16. */   
  17. require_once('include/PHPMailer/class.phpmailer.php'); //导入PHPMAILER类  
  18. $mail = new PHPMailer(); //创建实例  
  19. $mail -> CharSet='utf-8'//设置字符集  
  20. $mail -> SetLanguage('ch','include/PHPMailer/language/');  //设置语言类型和语言文件所在目录            
  21. $mail -> IsSMTP(); //使用SMTP方式发送  
  22. $mail -> SMTPAuth = true; //设置服务器是否需要SMTP身份验证    
  23. $mail -> Host = SMTP_SERVER; //SMTP 主机地址    
  24. $mail -> Port = SMTP_SERVER_PORT; //SMTP 主机端口  
  25. $mail -> From = SMTP_USER_MAIL; //发件人EMAIL地址  
  26. $mail -> FromName = 'jasonxu'//发件人在SMTP主机中的用户名    
  27. $mail -> Username = SMTP_USER_NAME; //发件人的姓名    
  28. $mail -> Password = SMTP_USER_PASS; //发件人在SMTP主机中的密码    
  29. $mail -> Subject = '测试邮件的标题'//邮件主题    
  30. $mail -> AltBody = 'text/html'//设置在邮件正文不支持HTML时的备用显示  
  31. $mail -> Body = '测试邮件的内容';//邮件内容做成  
  32. $mail -> IsHTML(true);  //是否是HTML邮件  
  33. $mail -> AddAddress('chinajason2008#gmail.com','jasonxu'); //收件人的地址和姓名    
  34. $mail -> AddReplyTo('chinajason2008#gmail.com','jasonxu'); //收件人回复时回复给的地址和姓名  
  35. $mail -> AddAttachment('include/id.csv','att.csv');//附件的路径和附件名称  
  36. if(!$mail -> Send()) //发送邮件    
  37. var_dump($mail -> ErrorInfo);  //查看发送的错误信息  

注意:phpmailer如果添加附件的时候,在附件名称里一定要写明附件的后缀,如果不写明附件后缀,默认的附件后缀会是.txt。
比如$mail -> AddAttachment('include/id.csv','att');//附件的路径和附件名称
如果向上面一样添加附件发送,则最终接到的附件可能是att.txt。
AddAttachment可以设置附件编码方式和附件类型,比如上面的附件添加也可以设置为
$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格式文件的附件类型可以是上面三种中的任意一种

以前项目中邮件发送的一个实例,整理个缩略版,方便套用:

[php]  view plain copy
  1. $body=$_smtp_body;  
  2. $mail=new PHPMailer();//得到一个PHPMailer实例  
  3. //$mail->SMTPSecure='tls';  
  4. $mail->CharSet="utf-8"//设置编码  
  5. $mail->IsSMTP();//设置采用SMTP方式发送邮件  
  6. $mail->Host=$_smtp_server;//设置SMTP邮件服务器的地址  
  7. $mail->Port=$_smtp_port;//设置邮件服务器的端口,默认为25  
  8. $mail->From=$_smtp_from_mail//设置发件人的邮箱地址  
  9. $mail->FromName=$_smtp_from_name;//设置发件人的姓名  
  10. $mail->Username=$_smtp_username;  
  11. $mail->Password=$_smtp_password;  
  12. $mail->AddAddress("$email","");//设置收件的地址(参数1)和姓名(参数2)  
  13. $mail->SMTPAuth=true;//开启SMTP认证  
  14. $mail->Subject=$_smtp_subject;//设置邮件的标题  
  15. //$mail->AltBody="text/html";  
  16. $mail->Body=$body;//邮件内容  
  17. $mail->IsHTML(true);//设置内容是否为html类型  
  18. //$mail->WordWrap=50;                                 //设置每行的字符数  
  19. //$mail->AddReplyTo("samzhang@tencent.com","samzhang");     //设置回复的收件人的地址  
  20. $mail->SMTPDebug=0;  
  21. if($mail->Send()){//发送邮件  
  22.   exit 'ok';  
  23. }else{  
  24.   exit 'fail';  
  25. }  

大概记得以前初次使用PHPMailer的时候,出现过莫名奇妙的问题,也在网上花了不少时间找资料,最终才得以解决。目前记得服务器PHP环境不能禁止fsockopen函数,否则邮件发送不了,但也有解决的办法。总之,一开始使用,总有不顺,由于时间久远,现在想来,也不知道具体改了什么。所以,将现在正在使用的PHPMailer目录文件打包上传到CSDN,也为方便以后使用吧,同时也方便为此事烦恼的朋友。PHPMailer下载:http://download.csdn.net/detail/zm2714/4578320

另外,将当时出现的问题所收录的内容整理如下:

1、Error: Could not connect to SMTP host

原因1:不邮邮件系统要求的smtp请求不同一,但是都允许大写,有些不支持小写,比如网易,腾讯的邮箱。(至于是不是这样,我没测试过,反正都改为大写,也不影响)

解决方法:

[php]  view plain copy
  1. public function IsSMTP() {  
  2.   $this->Mailer ='SMTP'// 将smtp ->SMTP ;即原来是小写,现在大写。  
  3. }  
  4.   
  5. // Choose the mailer and send through it  
  6. switch($this->Mailer) {  
  7.   case 'sendmail':  
  8.     return $this->SendmailSend($header$body);  
  9.   case 'SMTP'://同样 将smtp ->SMTP ;即原来是小写,现在大写。  
  10.     return $this->SmtpSend($header$body);  
  11.   case 'mail':  
  12.   default:  
  13.     return $this->MailSend($header$body);  
  14. }  

2、SMTP Error: Could not connect to SMTP host

原因:有的虚拟主机,或服务器,为了安全起见屏蔽了“fsockopen()函数”导致无法发送邮件

解决方法:

启用fsockopen函数

首先,在php.ini中去掉下面的两个分号

;extension=php_sockets.dll

;extension=php_openssl.dll

 替换fsockopen函数

可以将class.smtp.php文件中fsockopen函数换成pfsockopen函数

3、Could not instantiate mail function

原因:

设置的参数不正确,我使用了gmail做一些基本测试,需要在次设置其他参数。

解决方法:

$mail->SMTPSecure = ‘tls’; //只需要加上这句

注:这种错误我没碰到过,所以在上面的例子中,这个内容我是加了注释的。如果碰到这种错误的,可以使用这句试试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值