PHP mail函数发送HTML邮件可使用中文发件人和自定义发件人邮箱
思韵闪耀
2013-03-18
0
 在写PHP代码时,发送邮件着实是一件比较让人郁闷的事情,PHP默认提供的mail函数太弱了,很难琢磨清楚到底该怎么用。虽然也有很一些做得比较好得第三方库,可以提供相当强大的邮件功能,尤其是可以很简单的配置其使用gmail的stmp服务来发送邮件。但是使用这些库通过stmp来发送邮件就不能随意指定发件地址了,也没办法使用到默认mail函数所提供的调用立即返回,后台sendmail从等待列表中自动发送邮件的功能了。再加上有时就是为了写个小脚本,比如每天监控一下服务器状态,然后发送邮件报告的小功能,动用这种第三方库就有点杀鸡用牛刀了。通过不断的搜索+尝试,终于搞定了使用PHP默认mail函数发送邮件时让人模不着头脑的四大金刚:

怎样发送HTML格式邮件

主题给填上中文怎么是乱码啊!

收件人中除了填上收件人的邮件,还要填上名字,而且还是中文的

发件人要填上网站的名字,让人收到邮件的时候不是光秃秃的显示邮件地址,那太搓了,就像下面这张图


 

闲话不再说了,直接上代码,相信都能看懂的。

// 对邮件地址进行中文的UTF-8编码转化
function format_mail_address($address){
  if(preg_match("|<([^<]+)>|", $address, $matches)){
    $name = mb_substr($address, 0, strpos($address, '<'));
    $name = trim($name);
    $mail = $matches[1];
    $address = "=?UTF-8?B?".base64_encode($name)."?= " . "<$mail>";
  }
  return $address;
}
// 发送html格式的邮件
function html_mail($from, $to, $subject, $body){
  if(preg_match("|<([^<]+)>|", $from, $matches)){
    $from_name = mb_substr($from, 0, strpos($from, '<'));
    $from_mail = $matches[1];
    $from = "=?UTF-8?B?".base64_encode($from_name)."?= " . "<$from_mail>";
  }else{
    $from_mail = $from;
  }
  $headers[] = "From: $from";
  $headers[] = "X-Mailer: PHP";
  $headers[] = "MIME-Version: 1.0";
  $headers[] = "Content-type: text/html; charset=utf8";
  $headers[] = "Reply-To: $from_mail";
  $subject = "=?UTF-8?B?".base64_encode($subject)."?=";
  if(is_array($to)){
    foreach($to as $mail)
      $to_mails[] = format_mail_address($mail);
    $to = join(", ", $to_mails);
  }
  mail($to, $subject, $body, join("rn", $headers), "-f $from_mail");
}

函数使用可以参照下面的例子:

html_mail(
    "老谷自言自语 <admin@yorkgu.me>",
    array(
        "用户A <user1@gmail.com>",
        "用户B <user2@163.com>"),
    "这是一封测试邮件",
    "<html><body><h1 style='color:red'>
      感谢党,感谢政府,感谢大中华局域网,给我这个发送邮件的机会。
    </h1></body></html>"
);

PHP mail函数调用sendmail发送邮件,请尽量在linux系统中尝试以上代码

注意:以上代码运行可能存在国内邮箱中收不到的情况,因为可能包含敏感词汇。

如我的测试中,gmail收到邮件并置于垃圾邮箱中,而163没有收到。


【版权声明】
本站部分内容来源于互联网,本站不拥有所有权,不承担相关法律责任。如果发现本站有侵权的内容,欢迎发送邮件至masing@13sy.com 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

相关内容

将IIS设置克隆到新服务器...
将IIS设置克隆到新服务器的最佳方法是使用IIS配置文件。以下是详...
2025-06-06
搭建Git服务器及本机克隆...
Git是什么?Git是目前世界上最先进的分布式版本控制系统。SVN...
2025-03-17
ubuntu环境下搭建gi...
操作环境:服务器:Ubuntu 24.04.2 LTS+git 2...
2025-03-17
Linux系统挂载未分配硬...
先查看未挂载之前的磁盘使用情况发现磁盘使用率已经达到了96%,迫切...
2025-02-22
Linux lsblk 命...
简介Linux 中的 lsblk 命令,全称叫做:list blo...
2025-02-22
linux内核5和6区别
Linux内核5.x和6.x版本之间有显著的区别,这些区别主要体现...
2024-04-29

热门资讯

Exchange 2013/2... Exchange 2013/2016/2019邮件大小限制 可以在三个位置上配置Exchange上的...
SMTP 发送邮件错误码和解决... SMTP错误码/建议解决方法 错误总表 420 1. Timeout Communication P...
Exchange 2013 O... 最近在Exchange 2013环境中,遇到OWA/ECP无法访问的问题;用户是可以正常通过...
Roundcube 配置过各提... Fileinfo/mime_content_type configuration: OK Mimet...
彻底卸载Exchange Se... 一般来说,我们安装完Exchange Server 2016之后,可以通过正常卸载程序来进行卸载,但...
Exchange 2013批量... 一批量删除特定主题的邮件 1.1批量删除所有数据库中特定主题的邮件 1)群发了几封主题为backup...
快速查看已安装Exchange... Exchange 2010的版本号在Exchange管理控制台(EMC)显示的,好像不准确了。比如,...
在 Exchange 2016... 用户邮箱是与人员关联的 Exchange 邮箱,通常为每人一个邮箱。每个用户邮箱都有一个关联的 Ac...
exchange2013域名(... 需要对 接受的域 和 电子邮件地址策略进行配置: 首先外网域名要做解析和增加mx记录,这里就不具体说...
如何为AD 添加多个UPN后缀 今天我在群里看到有群友在问User principal name (UPN)多后缀的问题,我在这里就...