20150322 利用phpmailer来发送邮件
2015-03-22 Lover雪儿
最近事务繁杂,导致php学习落下了一段时间,记得好久以前学了在doc命令窗口利用smtp来发送邮件,http://www.cnblogs.com/lihaiyan/p/4319853.html ,此处,我们来利用一个强大的PHP类phpmailer来实现邮件的发送。
一、关于PHPMailer
phpMailer是一个非常强大的php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、富文本内容,上传附件,并且使用起来非常方便
对于相关的知识,昆明多彩科技写的很好,http://www.kmwzjs.co ,如下所示
使用前需要一个初始化对象如:$mail = new PHPMailer();
1.phpmailer属性表
属性 (v5.0.0) | 类型 | 默认 | 描述 |
$Priority | public | 3 | 优先级别(1 = 高, 3 = 中, 5 = 低) |
$CharSet | public | iso-8859-1 | 字符集信息 |
$ContentType | public | text/plain | 内容的消息类型 |
$Encoding | public | 8bit | 消息的Encoding,设置有: "8bit", "7bit", "binary", "base64", "quoted-printable". |
$ErrorInfo | public |
| 邮件发送错误信息. |
$From | public | root@localhost | 发件人地址. |
$FromName | public | Root User | 发件人姓名. |
$Sender | public |
| 发件人的返回路径信息, If not empty, will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode. |
$Subject | public |
| 邮件主题 |
$Body | public |
| 邮件正文,可以使用HTML/text,如果是HTML,会设置IsHTML为true. |
$AltBody | public |
| 纯文本正文,不支持HTML的备用显示 |
$WordWrap | public | 0 | 达到一定数目自动换行. |
$Mailer | public | | 发送邮件的方法: ("mail", "sendmail", or "smtp"). |
$Sendmail | public | /usr/sbin/sendmail | sendmail的路径. |
$PluginDir | public |
| PHPMailer插件路径,这是在不同的路径下的PHP include唯一有用的SMTP类Path to PHPMailer plugins. This is now only useful if the SMTP class is in a different directory than the PHP include path. |
$ConfirmReadingTo | public |
| 回执信息,值为需要接收回执信息的邮箱地址. |
$Hostname | public |
| 设置主机使用邮件ID和接收头和直升机作为默认字符串.如果为空,由服务器名返回的值是使用或'localhost.localdomain'. |
$Host | public | localhost | SMTP主机,所有主机必须;隔开.可以同时设置多个主机,格式:"smtp1.example.com:25;smtp2.example.com".发送邮件时按照队列尝试. |
$Port | public | 25 | SMTP主机端口 |
$Helo | public |
| 设置SMTP信息 (默认是$Hostname). |
$SMTPAuth | public | false | SMTP服务器是否需要认证,使用了用户名和密码变量. |
$Username | public |
| 设置 SMTP 用户名. |
$Password | public |
| 设置 SMTP 密码. |
$Timeout | public | 10 | 设置SMTP服务延迟时间.这个功能在win32平台不能用. |
$SMTPDebug | public | false | 开启SMTP类调试. |
$SMTPKeepAlive | public | false | 保持连接,关闭则是SmtpClose(). |
$Version | public |
| 返回PHPMailer版本号 |
$SingleTo | public | false | Provides the ability to have the TO field process individual emails, instead of sending to entire TO addresses |
2.phpmailer方法表
方法 (v5.0.0) | 类型 | 默认 | 描述 |
set($name, $value) | string $name |
| 为用户能够创建自己的自定义伪属性. |
addCustomHeader($value) | string $value |
| 创建自定义页头 . |
MsgHTML($message) |
|
| 使用HTML发送.比如可以定义一些html代码:昆明网站建设 |
IsMail() | boolean | true | 设置phpMailer是否使用mail()函数.(true, false or blank) |
IsSMTP() | boolean |
| 设置phpMailer是否使用 SMTP. 如果设置了该项,其他相关项也需要设置.(true, false or blank) |
IsSendmail() | boolean |
| 设置phpMailer是否使用Sendmail().(true, false or blank) |
IsQmail() | boolean |
| 设置phpMailer是否使用Sendmail() MTA. (true, false or blank) |
SetFrom($address, $name = "") | string $address |
| 增加一个邮件发件人地址. |
AddAddress($address, $name = "") | string $address |
| 增加一个收件人地址(邮件目的地址). |
AddCC($address, $name = "") | string $address |
| 增加一个抄送地址. 注意:此功能需要smtp服务器搭建在win32平台. |
AddBCC($address, $name = "") | string $address |
| 增加一个密送地址. 注意:此功能需要smtp服务器搭建在win32平台. |
AddReplyTo($address, $name = "") | string $address |
| 增加一个回复地址(别人回复时的地址). |
Send() |
|
| 创建信息和发送邮件,如果发送不成功则返回false,使用ErrorInfo属性可以显示错误描述,发送成功返回true. |
AddAttachment($path, $name = "", $encoding = "base64", | string $path |
| 添加从本地一个附件.如果找不到该附件就返回false.参数分别是:本地路径,编码,文件类型 |
AddEmbeddedImage($path, $cid, $name = "", $encoding = "base64", | string $path |
| 增加一个嵌入式附件,包括图像,声音等其他几乎任何文件,一定要设置$type属性,如果是jpeg就使用"image/jpeg",gif则是"image/gif",具体对应的请自行参照相关文件.如果使用MsgHTML()就没用必要使用这个方法. |
ClearAddresses() |
|
| 清除所有收件人地址,返回无效. |
ClearCCs() |
|
| 清除所有抄送地址,返回无效. |
ClearBCCs() |
|
| 清除所有密送地址,返回无效. |
ClearReplyTos() |
|
| 清除所有回复地址,返回无效. |
ClearAllRecipients() |
|
| 清除所有收件人/草送/密送地址,返回无效. |
ClearAttachments() |
|
| 清除所有设置的文件/字符串/二进制附件,返回无效. |
ClearCustomHeaders() |
|
| 清除所有设置的页头,返回无效. |
Send() |
|
| 发送邮件 |
SetLanguage($lang, $langpath) | string $lang |
| 设置错误提示语言,默认是英语,第一参数是语言,第二个参数是语言文件路径 |
方法 (v5.0.0) | 类型 | 默认 | 描述 |
set($name, $value) | string $name |
| 为用户能够创建自己的自定义伪属性. |
addCustomHeader($value) | string $value |
| 创建自定义页头 . |
MsgHTML($message) |
|
| 使用HTML发送.比如可以定义一些html代码:昆明网站建设 |
IsMail() | boolean | true | 设置phpMailer是否使用mail()函数.(true, false or blank) |
IsSMTP() | boolean |
| 设置phpMailer是否使用 SMTP. 如果设置了该项,其他相关项也需要设置.(true, false or blank) |
IsSendmail() | boolean |
| 设置phpMailer是否使用Sendmail().(true, false or blank) |
IsQmail() | boolean |
| 设置phpMailer是否使用Sendmail() MTA. (true, false or blank) |
SetFrom($address, $name = "") | string $address |
| 增加一个邮件发件人地址. |
AddAddress($address, $name = "") | string $address |
| 增加一个收件人地址(邮件目的地址). |
AddCC($address, $name = "") | string $address |
| 增加一个抄送地址. 注意:此功能需要smtp服务器搭建在win32平台. |
AddBCC($address, $name = "") | string $address |
| 增加一个密送地址. 注意:此功能需要smtp服务器搭建在win32平台. |
AddReplyTo($address, $name = "") | string $address |
| 增加一个回复地址(别人回复时的地址). |
Send() |
|
| 创建信息和发送邮件,如果发送不成功则返回false,使用ErrorInfo属性可以显示错误描述,发送成功返回true. |
AddAttachment($path, $name = "", $encoding = "base64",$type= "application/octet-stream") | string $path |
| 添加从本地一个附件.如果找不到该附件就返回false.参数分别是:本地路径,编码,文件类型 |
AddEmbeddedImage($path, $cid, $name = "", $encoding = "base64", | string $path |
| 增加一个嵌入式附件,包括图像,声音等其他几乎任何文件,一定要设置$type属性,如果是jpeg就使用"image/jpeg",gif则是"image/gif",具体对应的请自行参照相关文件.如果使用MsgHTML()就没用必要使用这个方法. |
ClearAddresses() |
|
| 清除所有收件人地址,返回无效. |
ClearCCs() |
|
| 清除所有抄送地址,返回无效. |
ClearBCCs() |
|
| 清除所有密送地址,返回无效. |
ClearReplyTos() |
|
| 清除所有回复地址,返回无效. |
ClearAllRecipients() |
|
| 清除所有收件人/草送/密送地址,返回无效. |
ClearAttachments() |
|
| 清除所有设置的文件/字符串/二进制附件,返回无效. |
ClearCustomHeaders() |
|
| 清除所有设置的页头,返回无效. |
Send() |
|
| 发送邮件 |
SetLanguage($lang, $langpath) | string $lang |
| 设置错误提示语言,默认是英语,第一参数是语言,第二个参数是语言文件路径 |
ClearAttachments() |
|
| 清除所有设置的文件/字符串/二进制附件,返回无效. |
ClearCustomHeaders() |
|
| 清除所有设置的页头,返回无效. |
Send() |
|
| 发送邮件 |
SetLanguage($lang, $langpath) | string $lang |
| 设置错误提示语言,默认是英语,第一参数是语言,第二个参数是语言文件路径 |
ClearAttachments() |
|
| 清除所有设置的文件/字符串/二进制附件,返回无效. |
ClearCustomHeaders() |
|
| 清除所有设置的页头,返回无效. |
Send() |
|
| 发送邮件 |
SetLanguage($lang, $langpath) | string $lang |
| 设置错误提示语言,默认是英语,第一参数是语言,第二个参数是语言文件路径 |
二、PHPMailer邮件发送
1.引入phpmailer类,并且实例化
2.邮件的设置
3.收件人,抄送,回复地址设置
4.开始正式写信
5.还可以AddAttachment()添加本地附件
6.最后使用send()函数正式发送
7.测试结果如下
发送邮件:
接着,163与qq邮箱依次收到邮件
邮件正文如下:
注意:关于邮件内容乱码问题
由于个人电脑上文本编辑器的编码格式不一样,有的人使用GB2312,gbk,UTF-8所以,所示在邮件正文出现乱码,只需要修改如下一行为相应的编码格式即可:
$phpmailer->CharSet = "UTF-8"; //设置字符集
乱码图片如下图所示:
附源码:
<?php /* 用PHPMailer类来发信 * 步骤: * 0: 引入 * 1: 实例化 * 2: 配置属性 * 3: 调用发送 * */ require('./PHPMailer_v5.1/class.phpmailer.php'); $phpmailer = new PHPMailer(); /*设置PHPMAILER发信用的方式 * 可以用win下的mail()来发送 * 可以用linux下sengmail ,gmail来发送 * 可以用smtp协议登录到某个账户上来发送 * */ $phpmailer->IsSMTP(); $phpmailer->Host = 'smtp.163.com'; //设置smtp服务器 $phpmailer->SMTPAuth = true; //SMTP服务器是否需要认证,要登录 $phpmailer->Port = 25; //smtp端口 $phpmailer->Username = "xxx"; //smtp服务器账号 xxx@163.com 中的xxx $phpmailer->Password = "xxxx"; //smtp服务器密码 //添加收件人 $phpmailer->AddAddress("lihaiyan1063385677@163.com", "myself"); //添加一个抄送 $phpmailer->AddCC("1063385677@qq.com","lover雪儿"); //增加一个回复属性 $phpmailer->AddReplyTo("1063385677@qq.com","雪"); //信息设置完毕 //开始正式写信 $phpmailer->CharSet = "UTF-8"; //设置字符集 $phpmailer->From = "lihaiyan1063385677@163.com"; //来自 $phpmailer->FromName = "lihaiyan1063385677"; //姓名 $phpmailer->Subject = "test from php mailer"; //主题 //开始正式写邮件内容 $phpmailer->Body = "this is the test mail for phpmailer!!!\n这是一封测试邮件"; //添加本地附件 $phpmailer->AddAttachment("./sanyecao.jpg","四叶草.jpg"); //发信 echo $phpmailer->send() ? "ok":"fail"; ?>