zoukankan      html  css  js  c++  java
  • 黄聪:如何利用PHP通过mail方法发送邮件【转】

    PHP发送邮件的小程序很简单,不过有些需要注意的地方。先上代码:

    01 <?php   
    02     $to = "gonnsai@163.com"
    03      
    04     $user = "Gonn";
    05     $date = date("Y年m月d日");
    06      
    07     $headers  = 'MIME-Version: 1.0' . "\r\n";
    08     $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
    09     $headers .= "To: $to \r\n";
    10     $headers .= "Cc: 252211974@qq.com \r\n";
    11     $headers .= 'From: gonnsai@163.com' . "\r\n";
    12  
    13     $subject = "珠海生活圈"
    14     $subject = "=?UTF-8?B?".base64_encode($subject)."?=";
    15   
    16     $content = '亲爱的'."$user".':'.'<br />'
    17     $content .= '<br />'
    18     $content .= "感谢您注册珠海生活圈,精彩的生活从珠海生活圈开始!".'<br />'
    19     $content .= "在珠海生活圈,您可以:".'<br />'
    20     $content .= "查询珠海的商家情况,方便您生活与娱乐。".'<br />'
    21     $content .= "了解最近珠海举行的活动,让您的生活更加丰富。".'<br />'
    22     $content .= "浏览新闻热点,扩展知识面。".'<br />'
    23     $content .= '<br />'
    24     $content .= "珠海生活圈 -- 为建成珠海最大的商家数据库而不断努力着。 ".'<a href="http://www.zhuhailife.net" target="_blank">www.zhuhailife.net</a>'.'<br />';
    25     $content .= '<br />'
    26     $content .= "珠海生活圈团队".'<br />';
    27     $content .= "$date".'<br />'
    28  
    29     $result = mail($to, $subject, $content, $headers); 
    30      
    31     if($result)
    32     {
    33         echo '邮件发送成功!';
    34     }
    35      
    36 ?> 

    有几个需要注意的地方。如果上面的代码没有 $subject = "=?UTF-8?B?".base64_encode($subject)."?="; 这么一句,你会发现邮件的标题是乱码,而邮件正文却是正确的。邮件头需要先用函数base64_encode(),就是使用 MIME base64 对数据进行编码。标题字符串前加编码类型例如: =?UTF-8?B?。

    还有邮件的类型设置为$headers = 'MIME-Version: 1.0' . "\r\n";。

    摘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的框架。

    MIME是通过标准化电子邮件报文的头部的附加领域(fields)而实现的;这些头部的附加领域,描述新的报文类型的内容和组织形式。

    $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; 当制定类型为 html的时候,邮件正文就可以使用 HTML 的标签了。

    几种常见的类型:

    • text/plain(纯文本)
    • text/html(HTML文档)
    • application/xhtml+xml(XHTML文档)
    • image/jpeg(JPEG图像)【PHP中为:image/pjpeg】
    • image/gif(GIF图像)
    • image/png(PNG图像)【PHP中为:image/x-png】
    • video/mpeg(MPEG动画)
    • application/pdf(PDF文档)
    • application/msword(Microsoft Word文件)
    • application/octet-stream(任意的二进制数据)
    • application/x-www-form-urlencoded(使用HTTP的POST方法提交的表单)
    • multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)

    此外,尚未被接受为正式数据类型的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。

    

  • 相关阅读:
    【Sqoop】介绍、安装、使用(列出MySQL中数据库/表 + mysql数据导入到Hive表 + Hive表数据导出到mysql表)
    【异常】MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on di
    【异常】Flume启动卡主异常:Agent configuration for 'a2' does not contain any valid channels. Marking it as invalid.
    【异常】转载 kafka.common.MessageSizeTooLargeException
    【异常】转载 ERROR KafkaProducer
    【异常】转载 如何优雅地关闭kafka
    【异常】转载 KAFKA生产者数据丢失问题的排查
    【异常】java.lang.ClassCastException: org.apache.spark.rdd.ShuffledRDD cannot be cast to org.apache.spark.streaming.kafka010.HasOffsetRanges
    mmap
    链表
  • 原文地址:https://www.cnblogs.com/huangcong/p/2050616.html
Copyright © 2011-2022 走看看