封装PHP mail函数发送HTML邮件并使用中文发件人且自定义发件人邮箱地址
来源:互联网 发布:身份证借去开淘宝店 编辑:程序博客网 时间:2024/06/05 04:22
在写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("\r\n", $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没有收到。
- 封装PHP mail函数发送HTML邮件并使用中文发件人且自定义发件人邮箱地址
- javaMail发送邮件设置发件人中文昵称
- javaMail发送邮件设置发件人中文昵称
- Java使用javax.mail发送邮件 解决收件人、发件人名字乱码问题
- JAVA基础(13) javaMail发送邮件设置发件人中文昵称
- javaweb项目发送邮件自定义发件人名称(javamail)
- linux下指定发件人的邮件发送
- mutt发送邮件--设置发件人地址
- 在SQL Server中,使用CDONTS发送邮件,并让发件人显示姓名而不是单纯的邮件地址
- 用PHP MAIL()函数发送HTML邮件
- PHP mail函数发送HTML邮件
- python自动发送邮件自定义邮件发件人和收件人的显示内容
- Outlook 2007 发送邮件的发件人中文为问号的解决方法
- linux服务器端 postfix+php邮件发送+发件人代发修改配置
- 邮件发件人和主题
- Java发送邮件时标题和发件人乱码
- javaMail发送邮件,标题/发件人/附件名称乱码
- [php]mail函数发送邮件
- Hadoop HDFS源码学习笔记(六)--fetchBlockByteRange
- 扫描可以使用的NFS Server目录
- 类似于QQ游戏百万人同时在线的服务器架构实现
- 奇艺QSV文件格式简单分析
- 离散数学复习笔记
- 封装PHP mail函数发送HTML邮件并使用中文发件人且自定义发件人邮箱地址
- grttimeofday和xtime的定时精度
- SQL Server内部的内存管理
- 数据结构---队列实现
- 检验字段值是否符合规则
- SQLMAP参数中文解说
- Windows Server 2003 SP2 企业版 ISO 下载 629M
- 深入浅出URL编码
- 好几台机子跑 puppet 出错,郁闷啊