上篇文章PHP mail()方法发送邮件部分邮箱无法收到邮件问题提到要介绍一下phpmailer这款免费开源的php 邮件程序,下面我们来看看吧,以下资料全部来自phpmailer官方网站:
PHPMailer 也是一个功能强大的邮件类
PHPMailer的主要功能特点:
- 支持邮件 s/mime加密的数字签名
- 支持邮件多个 TOs, CCs, BCCs and REPLY-TOs
- 可以工作在任何服务器平台,所以不用担心WIN平台无法发送邮件的问题的
- 支持文本/HTML格式邮件
- 可以嵌入image图像
- 对于邮件客户端不支持HTML阅读的进行支持
- 功能强大的发送邮件调试功能debug
- 自定义邮件header
- 冗余SMTP服务器支持
- 支持8bit, base64, binary, and quoted-printable 编码
- 文字自动换行
- 支持多附件发送功能
- 支持SMTP服务器验证功能
- 在Sendmail, qmail, Postfix, Gmail, Imail, Exchange 等平台测试成功
- 提供的下载文件中,包括内容详细的说明文档及示例说明,所以不用担心难于上手的问题!
- PHPMailer 非常小巧、简单、方便、快捷
以上资料由Jiucool 翻译自phpmailer 官网,转载请注明!
PHPMailer的使用(这里以使用gmail smtp发送邮件为例,当然也支持sendmail pop 等其他方式):
- 首先到http://phpmailer.worxware.com/ 下载最新版本的程序包
- 下载完成后,找到class.phpmailer.php 、class.smtp.php两个类放到自己的目录下!
- 然后新建一个php文件这里命名为:phpmail_jiucool.php
- phpmail_jiucool.php内容如下:
我直接将邮件发送模块写成一个函数postmail_jiucool_com(),大家使用的时候直接调用该函数即可,函数内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | function postmail_jiucool_com($to,$subject = "",$body = ""){ //Author:Jiucool WebSite: http://www.jiucool.com //$to 表示收件人地址 $subject 表示邮件标题 $body表示邮件正文 //error_reporting(E_ALL); error_reporting(E_STRICT); date_default_timezone_set("Asia/Shanghai");//设定时区东八区 require_once('class.phpmailer.php'); include("class.smtp.php"); $mail = new PHPMailer(); //new一个PHPMailer对象出来 $body = eregi_replace("[\]",'',$body); //对邮件内容进行必要的过滤 $mail->CharSet ="UTF-8";//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码 $mail->IsSMTP(); // 设定使用SMTP服务 $mail->SMTPDebug = 1; // 启用SMTP调试功能 // 1 = errors and messages // 2 = messages only $mail->SMTPAuth = true; // 启用 SMTP 验证功能 $mail->SMTPSecure = "ssl"; // 安全协议 $mail->Host = "smtp.googlemail.com"; // SMTP 服务器 $mail->Port = 465; // SMTP服务器的端口号 $mail->Username = "SMTP服务器用户名"; // SMTP服务器用户名 $mail->Password = "SMTP服务器密码"; // SMTP服务器密码 $mail->SetFrom('发件人地址,如admin#jiucool.com #换成@', '发件人名称'); $mail->AddReplyTo("邮件回复地址,如admin#jiucool.com #换成@","邮件回复人的名称"); $mail->Subject = $subject; $mail->AltBody = "To view the message, please use an HTML compatible email viewer! - From www.jiucool.com"; // optional, comment out and test $mail->MsgHTML($body); $address = $to; $mail->AddAddress($address, "收件人名称"); //$mail->AddAttachment("images/phpmailer.gif"); // attachment //$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!恭喜,邮件发送成功!"; } } |
当然还有更多、更详细的配置方式,大家可以自由发挥!
发邮件时,出现,这个是啥问题,用的是你这个函数,QQ企业邮箱
刚开始一直出现错误,无法链接stmp服务器,然后将class.phpmailer.php文件做了如下的修改:
function IsSMTP() {
$this->Mailer = ‘smtp’;
}
改成:
function IsSMTP() {
$this->Mailer = ‘SMTP’;
}
修改好后, stmp服务器是连接上,接着就出现下面的错误提示。
Mailer Error: Could not instantiate mail function.
请教,这个是啥问题?
[Reply]
路过,学习了
[Reply]
我用phpmailer 5.1 版本时,遇到下面的问题,不知道大家有没有思路?
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = “ssl”;
$mail->Host = “smtp.gmail.com”;
$mail->Port = 465;
$mail->Username = “lexo.charles@gmail.com”;
$mail->Password = “*****”;
就是我像上面打开了 smtp 认证 SMTPAuth = true; ,然后填写信息,发现并不会进行认证,即便我随便填写错误的 host username password 变量也可以不用验证,直接发送邮件。
是不是我的理解有问题,就是即便打开了认证也不需要正确的 host username password 就可以发送邮件?
还有就是 163,qq 等邮箱收到邮件后,会显示由我的服务器代发:
发件人:cscanada; (由 ****@*****.net 代发)
是不是验证过的就不会显示了?因为我用 foxmail smtp 发就不会显示。
[Reply]
酷哥这个类怎么调用的啊!
[Reply]
[Reply]
我是新手,請教一下這個 “SMTP服务器用户名”應該是填什麽?還有“SMTP服务器密码”?
[Reply]
久酷,
用Gmail可以使用。
但是当我使用smtp.163.com代替gmail,更改了这些:
$mail->Host = “smtp.163.com”; // SMTP 服务器
$mail->Port = 465; // SMTP服务器的端口号
$mail->Username = “SMTP服务器用户名”; // SMTP服务器用户名
$mail->Password = “SMTP服务器密码”; // SMTP服务器密码
结果不行。
SMTP -> ERROR: MAIL not accepted from server: 553 You are not authorized to send mail, authentication is required
The following From address failed: ivnt@iganjue.com Mailer Error: The following From address failed: ivnt@iganjue.com
SMTP server error: You are not authorized to send mail, authentication is required
大概什么原因,如何解决?谢谢。
[Reply]
久酷
Reply:
January 14th, 2011 at 09:29
@Avery, 你检查下用户名是不是正确. 你这个是用的163企业邮箱吧?
[Reply]