使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)


Posted in PHP onApril 26, 2013
/*PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括:
*.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址

*.支持多种邮件编码包括:8bit,base64,binary和quoted-printable

*.支持SMTP验证

*.支持冗余SMTP服务器

*.支持带附件的邮件和Html格式的邮件

*.自定义邮件头

*.支持在邮件中嵌入图片

*.调试灵活

*.经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等

*.可运行在任何平台之上
phpMailer是一个非常强大的php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、富文本内容,上传附件,.....
官方网站:http://phpmailer.worxware.com/
下载地址:http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list
*/ 
require_once('include/PHPMailer/class.phpmailer.php'); //导入PHPMAILER类
$mail = new PHPMailer(); //创建实例
$mail -> CharSet='utf-8'; //设置字符集
$mail -> SetLanguage('ch','include/PHPMailer/language/');  //设置语言类型和语言文件所在目录          
$mail -> IsSMTP(); //使用SMTP方式发送
$mail -> SMTPAuth = true; //设置服务器是否需要SMTP身份验证  
$mail -> Host = SMTP_SERVER; //SMTP 主机地址  
$mail -> Port = SMTP_SERVER_PORT; //SMTP 主机端口
$mail -> From = SMTP_USER_MAIL; //发件人EMAIL地址
$mail -> FromName = 'jasonxu'; //发件人在SMTP主机中的用户名  
$mail -> Username = SMTP_USER_NAME; //发件人的姓名  
$mail -> Password = SMTP_USER_PASS; //发件人在SMTP主机中的密码  
$mail -> Subject = '测试邮件的标题'; //邮件主题  
$mail -> AltBody = 'text/html'; //设置在邮件正文不支持HTML时的备用显示
$mail -> Body = '测试邮件的内容';//邮件内容做成
$mail -> IsHTML(true);  //是否是HTML邮件
$mail -> AddAddress('chinajason2008#gmail.com','jasonxu'); //收件人的地址和姓名  
$mail -> AddReplyTo('chinajason2008#gmail.com','jasonxu'); //收件人回复时回复给的地址和姓名
$mail -> AddAttachment('include/id.csv','att.csv');//附件的路径和附件名称
if(!$mail -> Send()) //发送邮件  
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格式文件的附件类型可以是上面三种中的任意一种

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

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

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

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

解决方法:

public function IsSMTP() {
  $this->Mailer ='SMTP'; // 将smtp ->SMTP ;即原来是小写,现在大写。
}
// Choose the mailer and send through it
switch($this->Mailer) {
  case 'sendmail':
    return $this->SendmailSend($header, $body);
  case 'SMTP'://同样 将smtp ->SMTP ;即原来是小写,现在大写。
    return $this->SmtpSend($header, $body);
  case 'mail':
  default:
    return $this->MailSend($header, $body);
}

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'; //只需要加上这句

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

PHP 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
php,不用COM,生成excel文件
Oct 09 PHP
用户的详细注册和判断
Oct 09 PHP
测试您的 PHP 水平的题目
May 30 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
PHP正则表达式笔记与实例详解
May 09 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 #PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 #PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
Apr 25 #PHP
PHP中操作ini配置文件的方法
Apr 25 #PHP
基于python发送邮件的乱码问题的解决办法
Apr 25 #PHP
关于php正则匹配汉字的方法介绍
Apr 25 #PHP
PHP中如何调用webservice的实例参考
Apr 25 #PHP
You might like
深入理解PHP原理之异常机制
2010/08/21 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
20招让你的Python飞起来!
2016/09/27 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
python实现飞机大战小游戏
2019/11/08 Python
django中的数据库迁移的实现
2020/03/16 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
项目工作说明书
2014/07/29 职场文书
党员评议自我评价
2015/03/03 职场文书
创业计划书详解
2019/07/19 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis