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

时间:2010-12-30 18:09:27

标签: php email

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

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

4 个答案:

答案 0 :(得分:18)

Quoting

  

PHP mail()函数的缺点

     

在某些情况下,邮件会通过   PHP mail()没有收到   收件人虽然是由WB发送的   没有任何错误消息。最多   这个问题的常见原因是   如下所列。

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

标题或格式的错误   内容可能会导致邮件   被视为垃圾邮件。在最好的情况下,   这些邮件转移到垃圾邮件   收件人收件箱或发送的文件夹   回到发件人。在最坏的情况下,   这些邮件被删除没有任何   评论。如果没有安装sendmail   或者没有配置,没有邮件可以   发送。

     

免费邮件是常见的做法   GMX等提供商拒绝邮件   通过PHP函数mail()发送。非常   经常这样的邮件被删除没有   收件人的任何信息。

答案 1 :(得分:6)

PHP的mail()被认为是乱码并且运行缓慢。我不能从个人经验中说出这个,因为我从未使用它,因为,像你一样,我总是被建议反对它。如果您查看entry for mail() in the PHP manual上的评论,您可以看到人们遇到的一些问题(尤其是标题)。

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

  

值得注意的是邮件()   功能不适合较大的   循环中的电子邮件量。这个   功能打开和关闭SMTP   每个电子邮件的套接字,不是   非常有效率。

     

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

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

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

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:0)

最大的原因是mail()可以直接与邮件服务器通信,如果您在清理输入时不知道自己在做什么,黑客可能会将您的邮件服务器欺骗为发送除你想要什么大多数第三方图书馆都有更好的卫生条件(或更好的API)来帮助防止这种情况发生。