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.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邮箱的退信问题。
扩展:
不要把任何除了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
这个比较强大,功能齐全。
php发送邮箱乱码,PHP使用STMP发送电子邮件,PHP使用STMP发送电子邮件乱码解决相关推荐
- java注册界面发送邮箱验证码(无线程版)
邮箱验证注册 本篇文章使用第三方jar包实现邮箱发送验证码来注册用户,该文章未采用线程如果多人访问注册注册页面发送邮件可能会导致服务器崩溃,建议采用线程发送邮件!!! 一.前期准备工作 1.发送验 ...
- 阿里云服务器发送邮箱失败问题
问题描述: 在本地启动项目并发送邮箱完全木有问题,ok,上云,注册用户,一顿操作猛如虎,what?,邮箱验证码发送失败??,什么玩意?? 原因: 发邮件的默认端口是25端口,而阿里云禁止通过STMP ...
- Thinkphp5.1实现发送邮箱验证码
这里使用的是 phpmailer/phpmailer 这个类 第一步加载类 composer require phpmailer/phpmailer 第二步编写公共方法 /*** 邮箱验证码* @pa ...
- spring java 发送邮箱验证
使用spring API实现发送邮箱验证的功能 pom.xml文件 <dependency><groupId>org.springframework.integration&l ...
- Python邮件发送SMATP模块详细总结(含qq邮箱及163邮箱服务开启及授权码获取,多附件发送)
Python实现电子邮件发送 在生活中或许我们多数都在用微信或者是QQ,但是工作中就会涉及邮件了,我也是最近在工作中用到了,所以找了些资料,有的较为完备有的就特别零散,所以自己也来整理分享一下.这里主 ...
- 网站发送邮箱验证实现找回密码
从上图可以看出,浏览器通过访问web站点中的邮件发送程序来提交邮件发送请求. 邮件发送程序将把邮件发送给自己网站的SMTP服务器,该SMTP服务器收到邮件后,将根据收件人的地址在将邮件的目的地,要么是 ...
- Python -- 服务器与客户端,发送邮箱与短信
主要内容:建立简易聊天室服务器及客户端.采用UDP协议发送及接受图片,采用smtplib发送邮件,采用urllib发送短信 建立简易聊天室 服务器 from socket import socket ...
- 登录功能中发送邮箱验证的简单使用
登录功能中发送邮箱验证的简单使用 java开发中常用的邮箱相关的就是给邮箱发送验证码,发送验证码在java中使用javamail,它提供了一套发送和接收功能的标准,支持协议:smtp,pop3,ima ...
- nodejs实现发送邮箱验证码功能
今天做了个小demo,是用nodejs实现注册时(当然在别的地方也是可以用的)的邮箱验证功能,大体就是往指定的邮箱发送六位验证码.以下是详细步骤. 1.使用模块:nodemailer 安装:npm i ...
- php yeah 发送邮箱,phpmailer发送163,yeah邮箱
include "class.phpmailer.php"; include "class.smtp.php"; $mail = new PHPMailer() ...
最新文章
- 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)
- 缇 、 像素 、 厘米
- 自定义控件:广告内容后期加载。以及NamingContainer层次的应用
- 【CUDA7.5】MATLAB中配置Win7+Matlab R2015b+CUDA7.5+vs2013配置方法
- Java黑皮书课后题第8章:*8.2(求矩阵对角线元素的和)使用下面的方法头编写一个方法,求n*n的double类型矩阵中主对角线上所有数字的和。编写一个程序,读取一个4*4的矩阵,显示主对角线和
- python数据分析报告主题_【原创】python主题LDA建模和t-SNE可视化数据分析报告论文(代码数据)...
- jquery Ajax请求本地json
- selenium fluentwait java实例
- 计算机网络系统是弱电工程,弱电工程包括哪些类型?常见的问题又有哪些?
- 求数组的子数组之和的最大值III(循环数组)
- SVM支持向量和逻辑回归的decision_function用法详解
- 提高linux运行速度,教你如何提高Linux操作系统的运行速度
- matlab生成的图片有边,科学网—图片空白边缘处理/统计直方图---matlab/保存生成高质量的清晰图 - 杨小林的博文...
- 层次分析法在matlab上的实现
- Linux 内核工作队列之work_struct 学习总结
- 程序员必读书籍排行榜,看看你读过的是否榜上有名
- 华为认证级别有哪些级别分类?考HCIP还是考HCIA?
- CentOS下载安装
- adb 强制删除系统应用
- 阿里技术leader:哪有什么天生的领导力,不过是后期不断磨练罢了
热门文章
- NXP(Freescale) QorIQ T2080 Memory Map分析
- oracle adf lov,Oracle ADF之 LOV 级联下拉菜单
- nonebot2聊天机器人插件9:定时提醒器timing
- php smarty 访问路径,smarty 模板路径问题
- 2020-03-15
- 煤矿进口替代产业全梳理,这些煤机配件空间巨大
- Log4j日志配置详解(Log4j2)
- VirtuaNES.v0.97源码探究2 图形查看器
- TexturePacker是一款很强大的游戏图片制作工具
- 足球运动员身价估计(随机森林)