codetc - 网站开发技术 首页 代码 PHP 查看内容

PHP实现邮件发送功能以及解决邮件乱码问题

2014-12-1 20:29| 发布者: CODETC| 查看: 5497| 评论: 1

PHP发送邮件功能通常使用mail函数或SMTP两种方式来实现,新手遇到最多的问题往往就是中文乱码的问题,特别是在中文简体和繁体都存在的时候。对于网站开发,在这里也强烈建议一下统一使用UTF-8编码,使用UTF-8编码通常都会让你在处理乱码的问题上省下很多麻烦。好了,其它的不多说,下面来说说怎么用这两种方法实现邮件的发送功能。

一、使用PHP内置的mail函数

语法: mail(to,subject,message,headers,parameters)

to 规定邮件的接收者
subject 规定邮件的主题。该参数不能包含任何换行字符
message 规定要发送的消息
headers 规定额外的报头,比如 From, Cc 以及 Bcc
parameters 规定 sendmail 程序的额外参数。

其实mail函数就这么简单的几个参数,但如果编码没弄好,就很在可能会导致某些客户端接收邮件时显示乱码,解决方法就是正确的设置mail的headers就行了,下面是使用UTF-8编码的完美的无乱码的例子。
<?php
// 当发送 HTML 电子邮件时,请始终设置 content-type
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html; charset=utf-8";
mail($to,$subject,$message,$headers);
?>
优点:使用方便就一个简单的函数
缺点:需要php.ini支持该函数,如果某些服务器不支持而又不能改环境那就不行了,而且mail函数的稳定性跟系统有一定的关联,所以在不同的服务器环境下的稳定性可能都不同,会导致邮件有时候发送不正常的情况。

二、使用SMTP发送邮件
这里我们给出一个已经封装好的smtp类email.class.php,该类里同样也设置了默认编码,如果没设置编码的话会在某些不能自动识别编码的客户端上出现乱码。

这个类的使用方法实例:
<?php
require_once ('email.class.php');

$smtpserver = "smtp.exmail.qq.com";
$smtpserverport =25;
$smtpusermail = "codetc@qq.com";
$smtpuser = "codetc@qq.com";
$smtppass = "xxxxxx";
$mailtype = "HTML";

$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);
$smtp->debug = false;
$smtp->sendmail($to, $smtpusermail, $subject,$message, $mailtype,"utf-8");
?>
使用也相当简单。先引入email.class.php然后实例化smtp类,配置debug模式,发送邮件,需要注意的是设置最后的编码,当然如果这里不设置的话默认也是UTF-8,如果设置成其它的比如gb2312, big5之类的就有可能在某些邮件客户端会出现乱码了。

上面所说的都是关于邮件内容的问题,有时候邮件的 headers 中 subject 也可能会出现乱码
为了防止subject出现筹码,记住不要把任何除了 iso-8859-1 编码之外的文字直接放进 subject,正确的方式是让 subject 里头的文字符合 RFC 2047 的规范,假设你的 subject 处的文字的编码是 GB2312,那么正确的 subject 应该是这样的格式 $headers[‘subject’] = ‘=?GB2312?B?’ . base64_encode(‘标题文字’) . ‘?=';如果是 UTF-8 的话,把上面开头的 GB2312 替换成 UTF-8 即可。

这里提供的类已经把对subject的处理也做在里面了,而外面只要传参设置编码为utf-8或者GB2312就行了。在email.class.php里是这样处理的,这样有效的解决了乱码问题。

优点:可靠性强,稳定
缺点:代码较多,邮箱的账号密码必须使用明文存于本站中,不安全因素增加,同时也需要在自己的邮箱配置开启smtp服务

SMTP邮件类下载:email.class.zip (2.42KB)
文章来源 CODETC,欢迎分享,转载请注明地址: http://www.codetc.com/article-77-1.html
发表评论

最新评论

引用 Asiaidc.net  2017-3-6 19:07
不错的教程,终于解决了乱码问题,特别感谢下!

查看全部评论(1)

 作为游客发表评论,请输入您的昵称

返回顶部