例子,PHP发送邮件的小程序。
专题推荐:php发邮件代码大全
代码:
<?php
$to = "xxx@163.com";
$user = "Gonn";
$date = date("Y年m月d日");
$headers = 'MIME-Version: 1.0' . "rn";
$headers .= 'Content-type: text/html; charset=utf-8' . "rn";
$headers .= "To: $to rn";
$headers .= "Cc: 252211974@qq.com rn";
$headers .= 'From: xxx@163.com' . "rn";
$subject = "语句网";
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";
$content = '亲爱的'."$user".':'.'<br />';
$content .= '<br />';
$content .= "感谢您注册语句网,精彩的生活从语句网开始!".'<br />';
$content .= "在语句网,您可以:".'<br />';
$content .= "查询珠海的商家情况,方便您生活与娱乐。".'<br />';
$content .= "了解最近珠海举行的活动,让您的生活更加丰富。".'<br />';
$content .= "浏览新闻热点,扩展知识面。".'<br />';
$content .= '<br />';
$content .= "语句网 -- 为建成珠海最大的商家数据库而不断努力着。 ".'<a href="http://www.yuju100.com" target="_blank">www.yuju100.com</a>'.'<br />';
$content .= '<br />';
$content .= "语句网团队".'<br />';
$content .= "$date".'<br />';
$result = mail($to, $subject, $content, $headers);
if($result)
{
echo '邮件发送成功!';
}
?>
注意事项:
如果以上代码没有 $subject = "=?UTF-8?B?".base64_encode($subject)."?=";
会发现邮件的标题是乱码,而邮件正文却是正确的。
邮件头需要先用函数base64_encode(),就是使用 MIME base64 对数据进行编码。标题字符串前加编码类型例如: =?UTF-8?B?。
还有邮件的类型设置为$headers = 'MIME-Version: 1.0' . "rn";。
摘wiki的解释:
多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。这个标准被定义在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 由RFC 822转变而来的RFC 2822,规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英语字符消息和二进制文件,图像,声音等非文字消息都不能在电子邮件中传输。MIME规定了用于表示各种各样的数据类型的符号化方法。 此外,在万维网中使用的HTTP协议中也使用了MIME的框架。(www.jb200.com)
MIME是通过标准化电子邮件报文的头部的附加领域(fields)而实现的;这些头部的附加领域,描述新的报文类型的内容和组织形式。
$headers .= 'Content-type: text/html; charset=utf-8' . "rn"; 当制定类型为 html的时候,邮件正文就可以使用 HTML 的标签了。
几种常见的类型:
此外,尚未被接受为正式数据类型的subtype,可以使用x-开始的独立名称(例如application/x-gzip)。vnd-开始的固有名称也可以使用(例:application/vnd.ms-excel)。
parameter可以用来指定附加的信息,更多情况下是用于指定text/plain和text/htm等的文字编码方式的charset参数。
MIME根据type制定了默认的subtype,当客户端不能确定消息的subtype的情况下,消息被看作默认的subtype进行处理。
Text默认是text/plain,Application默认是application/octet-stream而Multipart默认情况下被看作multipart/mixed。