PHP邮件mail()函数解析和SMTP使用方法及乱码问题
2017-11-21 15:11
811 查看
一、使用PHP内置的mail 函数
语法: mail(to,subject,message,headers,parameters)to 规定邮件的接收者
subject 规定邮件的主题。该参数不能包含任何换行字符
message 规定要发送的消息
headers 规定额外的报头,比如 From, Cc 以及 Bcc
parameters 规定 sendmail 程序的额外参数。
碰到的主要问题是乱码问题,刚开始是某些客户端接收邮件时好(比如QQ邮箱,估计带自动那个识别编码)的有些不foxmail、ipad显示乱码,解决方式正确的设置这个mail的headers就行了,下面是我使用的完美的无乱码的例子。
<?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支持该函数,如果某些服务器不支持而又不能改环境那就不行了而且总是不稳定,发的有时能收到有时不能。
二、使用SMTP发送邮件
这里使用一个已经封装好的smtp类email.class.php类被我修改过,增加了编码设置,没加编码设置的话会在某些不能自动识别编码的客户端上出现乱码。关于这个类的使用:
<?php require_once ('email.class.php'); $smtpserver = "smtp.exmail.qq.com"; $smtpserverport =25; $smtpusermail = "lyushine@qq.com"; $smtpuser = "lyushine@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模式,发送邮件,需要注意的是设置最后的编码。
刚开始我网上找的没有对编码进行处理导致乱码。
关于 headers 中 subject 的乱码:
不要把任何除了 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里是这样处理的,这样有效的解决了乱码问题。
相关文章推荐
- 【转自loveifa】PHP 获取邮箱未读邮件的方法 根据receivemail改编而来,已解决乱码,编码问题
- PHP的mail()函数发送邮件,其中的html标签未被正常解析的问题
- 使用System.Net.Mail.SmtpClient发送邮件时出现的乱码问题
- php使用fputcsv()函数csv文件读写数据的方法(解决中文乱码问题)
- Windows 7 下安装Smtp的替代方法可以解决php 的mail()函数报错问题()
- php程序使用mail()函数发送邮件的时候,标题中文的话会出现乱码
- 2010-09-03 19:00 Windows 7 下安装Smtp的替代方法可以解决php 的mail()函数报错问题
- 在Asp.Net中使用SmtpMail发送邮件的方法
- 在Asp.Net中使用SmtpMail发送邮件的方法:实例
- php smtp邮件发送的标题乱码等一系列问题
- 使用system.web.mail.SMTPmail发送邮件,处理smtp验证问题
- 使用Outlook发送邮件至移动设备导致移动设备接收winmail.dat问题解决方法
- php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
- 在Asp.Net中使用SmtpMail发送邮件的方法
- XAMPP 下配置SMTP mail服务,使PHP的mail() 函数可以发送邮件
- 调试php没法使用smtp发送邮件的问题
- VC轻松解析XML文件--CMarkup使用方法(解决解析中文字符出现乱码问题)
- php中使用mail()函数发送邮件
- VC轻松解析XML文件--CMarkup使用方法(解决解析中文字符出现乱码问题)
- php 发送邮件(HTML)解析乱码问题(多余叹号!等)