PHPMailer v. mail() 用于简单的联系表单

PHPMailer v. mail() for a simple Contact Form

提问人:Jeff 提问时间:8/13/2009 更新时间:8/13/2009 访问量:15816

问:

我是PHP的新手,但对事物有一定的掌握(还没有学过课程)。

问题:

选择哪个?PHPMailer 或 mail() 用于我的新联系表单。

形式很简单:

Your name:
Your email:
Subject:
Body:

我每天大约有 2,000 名访客,每天收到大约 10 份提交,所以我不需要任何太花哨的东西。=)

我脑海中的杂项问题:

  • PHPMailer 是否会更好地保护我的联系表免受 CC:注入(主要问题)?我已经知道诀窍了。anti-spambot display:none CSS
  • PHPMailer 会为我省去编写函数的步骤吗?email_validator()
  • PHPMailer 会为我节省任何其他编写自定义函数的时间吗?

谢谢!如果运气好的话,我很快就会回答问题。不。

PHP的

评论


答:

0赞 arbales 8/13/2009 #1

PHPMailer 是我的选择,因为它允许我向谷歌发送 SMTP 电子邮件,而无需安装任何库或配置邮件服务器,这样我就不必担心与垃圾邮件相关的问题。

评论

0赞 Jeff 8/13/2009
嗨,abales,我应该提一下,我的邮件服务器运行平稳,不需要Gmail或类似的东西。
18赞 karim79 8/13/2009 #2

这是我一口气能想到的一切,如果有任何明显的遗漏,请原谅我。

使用 PHP 内置的邮件函数的优点,无需外部库/包装器:

  • 你不需要任何东西 PHP的。
  • 您无需学习新的 API。
  • 您不必担心 PHP 升级之类的破坏脚本。
  • 您不必担心 更新版本不适用于您的 PHP安装。
  • 您不必担心 潜在的安全漏洞 使用该脚本的结果。
  • 如果这是一项简单的任务,你就完成了 几分钟后。

使用外部库/包装器的优点:

  • 如果需要介绍更多 复杂性融入您的电子邮件,您 可以很容易地做到这一点。添加 附件、内联图像等 使用PHP纯邮件没什么乐趣 功能。外部库(位于 最少好的)有一个更多的 OOPish API。添加附件可以像玩弄标题等一样简单。$message->addAttachment($file);
  • 外部库最好隐藏 任务的丑陋复杂性,例如 添加附件、字符 编码和内联图像。
  • 现在使用库将为您节省 必须在 未来,当您确实需要 额外的复杂性/功能。
  • 可能外部库(我是 真的不确定是哪些,以及 什么程度)解决某些 PHP邮件的漏洞 不。

如果我能想到其他什么,我一定会添加它。

评论

0赞 Jeff 8/13/2009
好东西。因为我不需要 HTML 功能、附件等。我倾向于mail()。
0赞 karim79 8/13/2009
@Jeff - 我使用Zend_Mail来处理我所有的电子邮件内容。也就是说,如果它像您在问题中描述的那样,我可能会使用 mail()。你不应该根据这里的任何一个答案来决定,而应该根据对你的具体情况的详细分析来决定,只有你能做到。
2赞 Pascal MARTIN 8/13/2009 #3

这可能不会真正回答你所有的问题,但也不会有什么坏处,我想......

无论你想做什么,我都不会使用 mail():发送邮件并不是一件容易的事,使用现有的库/框架总是一个好主意:它将解决许多你可能甚至没有想到的问题——即使你不需要发送大量邮件。


关于你的具体问题,也许其他答案会说别的东西和/或得到你的更多信息,但任何为发送邮件而创建的“好”库都应该处理这类问题......否则,您可能应该搜索另一个库^^

尽管如此,测试几个愚蠢的非地址将让您 100% 确定 ;-)


另一个非常确定的解决方案是检查库的来源;-)

在版本 2.2.1 的源代码中,您会找到如下内容:

class.phpmailer.php,函数,第 413 行,你会看到这个:AddAnAddress

if (!self::ValidateAddress($address)) {
  $this->SetError($this->Lang('invalid_address').': '. $address);
  if ($this->exceptions) {
    throw new phpmailerException($this->Lang('invalid_address').': '.$address);
  }
  echo $this->Lang('invalid_address').': '.$address;
  return false;
}

似乎这个函数被添加地址的其他函数使用......所以,我想有某种电子邮件地址验证;-)
这将回答您的至少一个问题^^


顺便说一句,PHPMailer 并不是唯一存在的解决方案;还有很多其他的,例如:

2赞 Steven Surowiec 8/13/2009 #4

正如 Pascal MARTIN 所提到的,发送电子邮件并不像某些人想象的那么简单明了。直接回答您的问题。是的,PHPMailer确实做了一些验证,但它不是超级高级的,但应该足以满足你的使用。PHPMailer 将为您节省一些时间,具体取决于您需要哪些自定义函数。不过,需要考虑以下几点:

  • HTML 与纯文本。如果电子邮件只发送给您,这可能没什么大不了的。但是,如果您曾经向用户发送电子邮件(例如确认电子邮件),则希望能够同时支持 HTML 和纯文本客户端。PHPMailer(和Zend_Mail)使这变得非常容易。
  • SMTP 中。如果您向用户发送电子邮件,这是另一个非常重要的问题,但如果它只是发送给您自己的电子邮件,则不那么重要。使用 php 的常规 mail() 函数,电子邮件将通过 sendmail 发送,几乎所有 *nix 安装都带有开箱即用的 sendmail(尤其是服务器)。因此,垃圾邮件过滤器对它不是很友好。如果您设置了具有受信任 MX 记录的常规 SMTP 服务器(或者您有 gmail 帐户),则可以使用 SMTP 发送邮件,这将有助于减少您的邮件被标记为垃圾邮件的机会。

除了 PHPMailer 之外,Zend_Mail 也是一个很好的检查对象(它是 Zend 框架的一部分)。但是,对于简单的联系表格来说,这可能有点多。