php mail发邮件标题中文乱码的问题解决办法
当使用下面的PHP语句发送电子邮件的时候,如果编码和接收邮箱编码不相同,会发现邮件的标题是乱码,而邮件正文却是正确的,如何才能使得邮件标题不是乱码呢?
$subject = stripslashes($the_post['Title']);
$headers = "MIME-Version: 1.0rn";
$headers .= "Content-type: text/plain; charset=utf-8rn";
$headers .= "Content-Transfer-Encoding: 8bitrn";
$message = stripslashes(strip_tags($the_post['Content']));
mail($to, $subject, $message, $headers);
先用函数base64_encode() — 使用 MIME base64 对数据进行编码
标题字符串前加编码类型例如: =?UTF-8?B?
标题字符串后加:?=
例如:
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";
将上面一句添加到代码之中,这样,发送的中文邮件标题就不是乱码了。
代码如下 | 复制代码 |
<?php $headers = 'From: junhuibai@tom.com' . "rn" . if(mail($to, $subject, $message,$headers)) |
最终解决办法
代码如下 | 复制代码 |
标题乱码:
正文乱码: 设置header : charset=utf-8'
|
一 、windows sendmail
http://glob.com.au/sendmail/
二、windows smtp 服务器
http://msdn.microsoft.com/zh-cn/library/8b83ac7t(v=vs.80).aspx
解决 WIN7 SMTP 安装问题
有人说WIN7系统没有SMTP服务 怎么可能呢
具体安装步骤如下:
控制面板/程序>打开和关闭Windows功能
Internet信息服务 将 万维网服务>应用程序开发功能>.NET扩展性 勾上 安装 就可以了
帮你们解决的 说声谢谢啊
php mail()函数在windows不能用
php mail()函数在windows不能用,需要安装sendmail。
Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in
1.从http://glob.com.au/sendmail/下载sendmail.zip
2.解压到C:下,例如C:/PHP/sendmail,最好短路径,长路径名有可能产生问题。
3.修改php.ini如下
sendmail_path = "C:/PHP/sendmail/sendmail.exe -t"
4.根据你自己的配置环境修改sendmail.ini。
第一次最好启用debug.log_file,error_logfile,以查看sendmail是否生效。
5.重启apache
用sendmail结合其它的smtp服务器,如smtp.airmb.com来实现发邮件。现在大部分邮箱都要求smtp验证,所以要在sendmail.ini中加入用户名和密码。
php.ini配置 (以用airmb.com邮箱为例)
[mail function]
; For Win32 only.
SMTP = smtp.airmb.com
smtp_port = 25
; For Win32 only.
sendmail_from = facai@airmb.com
; For Unix only. You may supply arguments as well (default: “sendmail -t -i”).
sendmail_path = “C:/PHP/sendmail/sendmail.exe -t”
就配置三项,smtp、smtp_port和sendmail_path
sendmail.ini配置
[sendmail]
; you must change mail.mydomain.com to your smtp server
smtp_server=smtp.airmb.com
smtp_port=25
auth_username=yourusername
auth_password=yourpassword
force_sender=facai@airmb.com
; default_domain=mydomain.com
同时在虚拟主机的conf里加上这样一句
php_admin_value sendmail_path 'C:/PHP/sendmail/sendmail.exe -t facai@airmb.com'
此邮件地址为用户的邮件地址,随便添。
注意
经测试,结果如下 : 发送成功 ,表示已发到邮件服务器队列 但!但邮件服务器没有启动!
运行: service sendmail start
另外 ,已发送成功的邮件,sendmail服务器会一直保存 ! 启动邮件服务器后 ,所有未发送的都会发送
今天在使用phpmailer发送邮件时居然提示SMTP Error: Could not authenticate,这个感觉是smtp设置的问题,下面我在网上找到了几种解决办法。今天在使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误,其中密码帐号都是正确的,邮箱也设置开启了SMTP功能。
上谷歌百度了一遍,有的说是服务器禁用了端口,有的说把class.phpmailer.php中的
代码如下 | 复制代码 |
function IsSMTP() { function IsSMTP() { |
测试以后还是不行,心中郁闷的一米。最后在一篇博客中找到了解决方法,先分享出来让更多遇到同样问题的人能得到帮助!
这个错误说明虚拟主机不支持PHPMailer默认调用的fsockopen函数,找到class.smtp.php文件,搜索fsockopen,就找到了这样一段代码:
代码如下 | 复制代码 |
// connect to the smtp server |
方法1:将fsockopen函数替换成pfsockopen函数
首先,在php.ini中去掉下面的两个分号
;extension=php_sockets.dll
;extension=php_openssl.dll
然后重启一下
因为pfsockopen的参数与fsockopen基本一致,所以只需要将@fsockopen替换成@pfsockopen就可以了。
方法2:使用stream_socket_client函数
一般fsockopen()被禁,pfsockopen也有可能被禁,所以这里介绍另一个函数stream_socket_client()。
stream_socket_client的参数与fsockopen有所不同,所以代码要修改为:
代码如下 | 复制代码 |
$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno, $errstr, $tval); |
这样就可以了。
如果上面办法还是没有解决可能是邮箱自动过滤你机器自动登录邮箱发邮件了哦,我是使用下面办法解决的
刚开始使用的qq的帐号,提示上面错误。换成新注册的163帐号可以正常发送。
之后换了一个qq等级比较高的帐号,这下可以正常发送,没有报任何错误。
因为收件人用的是qq邮箱帐号,所以发件帐号用qq的邮箱比较好,这样发送过多不会轻易的被拦截或判为垃圾邮件。
所以结论就是配置中使用一个qq等级比较高的帐号(我的一个小号等级2个月亮可以正常使用,当然等级越高越好,)
ps:也要查看邮箱中“设置邮件地址黑名单”及“收信规则”,有时系统会自动将一些邮箱自动加入黑名单的
我的PHPMailer发送邮件代码
代码如下 | 复制代码 |
header("Content-type:text/html;charset=utf-8"); $mail = new PHPMailer(); |
在使用PHPMailer发送邮件报错Msg:stream_socket_enable_crypto(): this stream does not support SSL/crypto,
出现这种情况请输出phpinfo()看下openssl这个扩展没有安装。
查找php安装时源码包的位置以/usr/local/src/php/php-5.3为例子
代码如下 | 复制代码 |
cd /usr/local/src/php/php-5.3/ext/openssl /usr/local/php/bin/phpize |
可能会出现下面的错误
代码如下 | 复制代码 |
Cannot find config.m4. Make sure that you run ‘/usr/local/php/bin/phpize’ in the top level source directory of the module |
解决办法:
代码如下 | 复制代码 |
mv config0.m4 config.m4 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ |
/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ 改目录下回生成一个openssl.so文件,找到php的配
置文件,在扩展区域添加
代码如下 | 复制代码 |
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/openssl.so |
如果你配置了还不能发送邮箱我们可以尝试在linux中直接使用mail函数直接发送邮件哦。
PHPMailer发送邮件现在php开发者比较常用的一个邮件发送组件了,利用它我们几乎不需要考虑任何问题,只要简单的把代码放网上把邮箱用户名密码与stmp改一下就可以发邮件了。PHPMailer是别人封装好的一个发送邮件的库,用起来很方便。其支持mail、sendmail和smtp的方式可以到https://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list去下载最新版本的。下面通过gmail smtp发送邮件为例来说明smtp使用方法。
代码如下 | 复制代码 |
$mail = new PHPMailer(); if(!$mail->Send()) { |
上面是核心代码,下面我们综合一下实例。
按如下示例编写代码即可实现php在线发送邮件.
一:前台表单
代码如下 | 复制代码 |
<html> |
二:后台PHP程序
代码如下 | 复制代码 |
$mail->From = "user@xxxx.com"; //邮件发送者email地址 //$mail->AddAttachment("/var/tmp/file.tar.gz"); // 添加附件 $mail->Subject = "PHPMailer测试邮件"; //邮件标题 if(!$mail->Send()) echo "邮件发送成功"; |
相关文章
PHP session_start()很慢问题分析与解决办法
本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25- 最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个...2016-11-25
js URLdecode()与urlencode方法支持中文解码
下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20php中json_decode()和json_encode()用法与中文不显示解决办法
本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25- 在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
- 401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
- Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
- 今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
- 今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
- 下面给大家介绍phpstudy访问速度慢的解决办法。1、修改mysql数据库链接地址为ip地址127.0.0.1。2、使用最新版本,这个坑了我好久时间。下面一段内容是关于phpstudy启动失败的解决办法。php5.3、5.4和apache都是用vc9编...2015-11-24
- 自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)
最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24- 这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
- 分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
- 一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
- 我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
- 小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
- 在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式。<?php$arr = array ( 'Name'=>'希亚', 'Age'...2015-11-08
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20