php mail()方法发送html格式的邮件

使用mail()方法的前提,已经有自己的邮件服务器,并在Webserver中作了相应的配置。具体方法这里不做介绍。

PHP手册中关于mail()方法定义:
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
具体每个参数的意义参见:http://cn2.php.net/manual/zh/function.mail.php

使用php的mail()方法发送html格式的邮件常出现的问题:
1、乱码
2、html格式未被解析,被当作字符串全部显示出来

问题的关键在于mail方法的第四个参数,$additional_headers。以下是可以实现正确发送的一段代码:

$subject = "=?GBK?B?".base64_encode('邮件主题')."?=";    //解决邮件主题乱码问题,GBK编码格式
$header = "From: 发件人姓名 <username@domain.com>\n";
$header .= "Return-Path: <username@domain.com>\n";	 //防止被当做垃圾邮件,但在sina邮箱里不起作用
$header .= "MIME-Version: 1.0\n";
$header .= "Content-type: text/html; charset=utf-8\n";    //邮件内容为utf-8编码
$header .= "Content-Transfer-Encoding: 8bit\r\n";	 //注意header的结尾,只有这个后面有\r
ini_set('sendmail_from', 'username@domain.com');	 //解决mail的一个bug
$send_message = wordwrap($send_message, 70);	 //每行最多70个字符,这个是mail方法的限制
mail($email, $subject, $send_message, $header);

其中,要注意的几个关键点:

1、邮件主题编码是GBK(兼容GB2312,个人推测GB2312也可以),否则会乱码。这跟浏览器的默认编码方式有关系。智能的浏览器可以自动检查邮件内容的编码方式,这个就不是问题了。
2、From: 后面, 发件人姓名两边必须各有一个空格,这个是由RFC 2822规定的。
3、邮件内容,每行最多70个字符,否则发不出去。这个在PHP手册中,mail()方法的说明里有。
4、最关键的(个人认为),$header的每个字符串结尾,都有一个\n结尾,最后一个后面是\r\n。
    手册里面的说明是,每个项之间要用\r\n来隔开。手册下面有一段补充例子:

Remember also to write only \r for windows and not for Linux-Servers.
And at the end of the header should be an extra blank line:

$headers .= "Content-Type: text/plain; charset = \"UTF-8\";\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "\n";

也就是说使用\r还是\n是由服务器决定的,windows服务器使用\r, Linux服务器使用\n。但是无论是什么服务器,都必须在最后额外地加一个\r或\n。即 at the end of the header should be an extra blank line。

转载于:https://my.oschina.net/Sandyguoguo/blog/159797

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值