上篇文章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(),大家使用的时候直接调用该函数即可,函数内容为:
function postmail_jiucool_com($to,$subject = "",$body = ""){
//Author:Jiucool WebSite: http://www.jiucool.org
//$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.org #换成@', '发件人名称');
$mail->AddReplyTo("邮件回复地址,如admin#jiucool.org #换成@","邮件回复人的名称");
$mail->Subject = $subject;
$mail->AltBody = "To view the message, please use an HTML compatible email viewer! - From www.jiucool.org"; // 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!恭喜,邮件发送成功!";
}
}
当然还有更多、更详细的配置方式,大家可以自由发挥!
版权声明:除特殊说明,文章均为博主 久酷 原创文章,转载请注明来源
如果 我的发送地址 是一个数组 怎么配置啊
Could not access file: Could not instantiate mail function. Mailer Error: Could not instantiate mail function.
请问这个错误怎么解决??
看看文件有没有执行权限
我提示发送成功,但是没收到mail 神马情况
发邮件时,出现,这个是啥问题,用的是你这个函数,QQ企业邮箱
刚开始一直出现错误,无法链接stmp服务器,然后将class.phpmailer.php文件做了如下的修改:
function IsSMTP() {
$this->Mailer = ‘smtp’;
}
改成:
function IsSMTP() {
$this->Mailer = ‘SMTP’;
}
修改好后, stmp服务器是连接上,接着就出现下面的错误提示。
Mailer Error: Could not instantiate mail function.
请教,这个是啥问题?
@freenow, 我也碰到这个问题了
路过,学习了
我用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 发就不会显示。
酷哥这个类怎么调用的啊! 🙄
🙂 这个类太帅了 ~ 拿来玩 ~
我是新手,請教一下這個 “SMTP服务器用户名”應該是填什麽?還有“SMTP服务器密码”?
久酷,
用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
大概什么原因,如何解决?谢谢。
@Avery, 你检查下用户名是不是正确. 你这个是用的163企业邮箱吧?
@Avery, 帅哥耶!你的
$mail->Port = 465; // SMTP服务器的端口号
要改为$mail->Port = 25; // SMTP服务器的端口号