php发送邮箱乱码,PHP使用STMP发送电子邮件,PHP使用STMP发送电子邮件乱码解决

PHP发送电子邮件,方法很多,一是使用PHP自带的email方法,二是使用stmp类,三是使用phpmail。下面分别简单介绍一下。

一、mail()方法

语法: mail(to,subject,message,headers,parameters)to 规定邮件的接收者

subject 规定邮件的主题。该参数不能包含任何换行字符

message 规定要发送的消息

headers 规定额外的报头,比如 From, Cc 以及 Bcc

parameters 规定 sendmail 程序的额外参数。

用法:// 当发送 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支持,这使得部分虚拟主机用户用起来很不方便。而且内置的这个方法有时候能收到邮件,有时候还不能。

二、使用一个smtp类

有一个封装好的smtp类,很好用,借用了163、QQ等厂商的SMTP服务器作为发件方服务器。例如,163,你需要开启163邮箱的smtp功能,一般163邮箱默认开启。

1432453459674308.jpg

类文件下载:

测试代码:require_once ('email.class.setutf8.php');

//##########################################

$smtpserver = "smtp.163.com";//SMTP服务器

$smtpserverport =25;//SMTP服务器端口

$smtpusermail = "***@163.com";//SMTP服务器的用户邮箱

$smtpemailto = "***@126.com";//发送给谁

$smtpuser = "***@163.com";//SMTP服务器的用户帐号

$smtppass = "***";//SMTP服务器的用户密码

$mailsubject = "您的网站有新的询盘";//邮件主题

$mailbody = "

你有新的询盘
";//邮件内容

$mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件

//##########################################

$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);

//这里面的一个true是表示使用身份验证,否则不使用身份验证.

$smtp->debug = true;//是否显示发送的调试信息

if($smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype,"utf-8")){

echo "邮件发送成功";

}

在email.class.setutf8.php文件的sendmail()中,设置了编码信息,以此解决乱码引起的163邮箱的退信问题。

1432454329502783.jpg

扩展:

不要把任何除了iso-8859-1编码之外的文字直接放进subject,正确的方式是让subject里头的文字符合RFC 2047的规范,假设你的subject处的文字的编码是GB2312,那么正确的subject应该是这样的格式

$headers['subject'] ='=?GB2312?B?'. base64_encode('标题文字') .'?=';

如果是UTF-8的话,把上面开头的GB2312替换成UTF-8即可。推荐在标题处使用GB2312 编码,因为MTA的分化实在是严重,大部分的MSP使用的都是自己开发的MTA,而相信国内的大部分MTA 无论如何都是可以支持 GB2312 编码的。

在这里对subject的处理在类里面,而外面只要传参设置编码为utf-8或者GB2312就行了。

在email.class.php里是这样处理的,这样有效的解决了乱码问题。function sendmail($to, $from, $subject = "", $body = "", $mailtype,$additional_headers = "utf-8", $cc = "", $bcc = "")

{

$mail_from = $this->get_address($this->strip_comment($from));

$subject ="=?".$additional_headers."?B?".base64_encode($subject)."?=";

$body = ereg_replace("(^|(\r\n))(\\.)", "\\1.\\3", $body);

$header .= "MIME-Version:1.0\r\n";

if($mailtype=="HTML"){

$header .= "Content-Type:text/html;Charset=\"".$additional_headers."\"\r\n";

}

注意,如果使用这个出现535 Error: authentication failed错误,说明邮箱账号或者密码输错了,小编曾经因为535错误困扰了很久,最后发现,是因为小编的163邮箱长度太长,由于小编很多年前设置的163密码长达19位,后来改短了,就恢复正常。这算是网易的问题吧。

这个方法用起来很稳定,毕竟电子邮件的大供应商还是值得信赖的。

注意:如果PHP升级到5.3及其以上版本,那么ereg_replace()不能使用,否则会提示错误信息,PHP版本高的,请自行替换不兼容的ereg_replace()和其他不兼容的PHP内置方法!

三、使用PHPMail

这个比较强大,功能齐全。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值