使用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 相关文章推荐
PHP初学者头疼问题总结
Oct 09 PHP
通过文字传递创建的图形按钮
Oct 09 PHP
PHP 导出数据到淘宝助手CSV的方法分享
Feb 27 PHP
Smarty Foreach 使用说明
Mar 23 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
Mar 25 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
PHP类的封装与继承详解
Sep 29 PHP
Zend Framework教程之Zend_Config_Ini用法分析
Mar 23 PHP
Yii的Srbac插件用法详解
Jul 14 PHP
Laravel框架分页实现方法分析
Jun 12 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
动态控制Table的js代码
2007/03/07 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
python基于ID3思想的决策树
2018/01/03 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
同程旅游英文网站:LY.com
2018/11/13 全球购物
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
《湘夫人》教学反思
2014/02/21 职场文书
社区党务公开实施方案
2014/03/18 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
关于学习的决心书
2015/02/05 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
《西门豹》教学反思
2016/02/23 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
Mysql排序的特性详情
2021/11/01 MySQL