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

2022-08-30 14:18:50

在PHP中发送电子邮件时,一般的意见是远离PHP的内置功能,而是使用库。mail()

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


答案 1

引用

PHP 函数的缺点mail()

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

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

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

免费邮件提供商(如GMX)的常见做法是拒绝通过PHP函数发送的邮件。通常,此类邮件在没有任何收件人信息的情况下被删除。mail()


答案 2

PHP据说会乱码头,运行缓慢。我不能从个人经验中这样说,因为我从未使用过它,因为像你一样,我一直被建议不要使用它。如果你看一下PHP手册中mail()条目的评论,你可以看到人们遇到的一些问题(特别是标题)。mail()

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

值得注意的是,mail() 函数不适合循环中较大的电子邮件量。此函数为每个电子邮件打开和关闭一个 SMTP 套接字,这不是很有效。

有关发送大量电子邮件的信息,请参阅 » PEAR::Mail 和 » PEAR::Mail_Queue 包。

AFAIK,无论您发送的邮件数量如何,为您发送的每封邮件打开和关闭套接字(性能方面)从来都不是可取的。

基本上,这是一个工作正常的功能,但不是很好,并且被许多更好的库所掩盖。


推荐