1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > php发送邮箱乱码 PHP使用STMP发送电子邮件 PHP使用STMP发送电子邮件乱码解决

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

时间:2022-09-30 22:43:13

相关推荐

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邮箱默认开启。

类文件下载:

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

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

$smtpserver="";//SMTP服务器

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

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

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

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

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

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

$mailbody="

你有新的询盘

";//邮件内容

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

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

$smtp=newsmtp($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邮箱的退信问题。

扩展:

不要把任何除了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里是这样处理的,这样有效的解决了乱码问题。functionsendmail($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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。