为什么我不应该使用PHP的mail()函数?

Ros*_*oss 30 php email

在使用PHP发送电子邮件时,一般意见是要避开PHP的内置mail()函数并使用库来代替.

我想知道的是使用mail()库或扩展的实际原因和缺陷.例如,通常指定的标头未包含在标准mail()调用中.

mar*_*cog 18

引用:

PHP mail()功能的缺点

在某些情况下,通过PHP发送的邮件mail()没有收到收件人,尽管它是由WB发送的,没有任何错误消息.下面列出了该问题的最常见原因.

  • 邮件标题或内容格式错误(例如Windows/Unix之间的换行符差异)
  • 未在服务器上安装或配置sendmail(php.ini)
  • recipeint的邮件提供者不允许PHP发送邮件mail(); 常见垃圾邮件保护

标头或内容格式的错误可能导致邮件被视为垃圾邮件.在最好的情况下,此类邮件将转移到收件人收件箱的垃圾邮件文件夹或发送回发件人.在最坏的情况下,这些邮件被删除而没有任何评论.如果未安装或未配置sendmail,则根本不能发送邮件.

免费邮件提供商(如GMX)通常会拒绝通过PHP函数发送的邮件mail().通常这些邮件被删除而没有收件人的任何信息.


Raf*_*ler 6

mail()据说PHP的标题是乱码而且运行缓慢.我不能从个人经验中说出这个,因为我从未使用它,因为,像你一样,我总是被建议反对它.如果您查看PHP手册中条目mail()的注释,您可以看到人们对它的一些问题(尤其是带有标题).

它绝对不适合发送任何大量的电子邮件,因为根据手册本身,

值得注意的是mail()函数不适合循环中的大量电子邮件.此功能为每封电子邮件打开和关闭SMTP套接字,效率不高.

要发送大量电子邮件,请参阅»PEAR :: Mail和»PEAR :: Mail_Queue包.

AFAIK,无论您发送的邮件数量多少,为您发送的每封邮件打开和关闭套接字都绝对不可取(性能方面).

基本上,它是一个有效的功能,但不是很好,并且被许多更好的库黯然失色.


Hal*_*luk 5

重要的不仅是mail()函数,还有你使用的smtp服务器.我使用了三个不同的smtp服务器与php:postfix,qmail,sendmail.

根据我的经验,postfix是最容易使用php mail(),但即使是postfix也有一些问题.你会遇到小错误.它可能是"收件人"收到正确结构化的电子邮件和收到损坏的电子邮件的"密件抄送"收件人之类的东西.你会失去很多时间来弄清楚这些错误.并且您的修复程序将使您的代码与其他smtp服务器无法正常工作.

问题在于处理电子邮件标题和PHP,但遗憾的是,这项工作做得不好.最近我切换到"PHP Mailer"库.在我们的网站上,我们有两个smtp服务器,一个带有postfix,另一个带有qmail."PHP Mailer"与它们一起工作,没有其他配置.