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

时间:2009-08-12 18:49:40

标签: php

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

问题:

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

表单很简单:

Your name:
Your email:
Subject:
Body:

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

我头脑中的其他问题:

  • PHPMailer是否会更好地保护我的联系表格不受CC:注入(主要关注)?我已经知道了anti-spambot display:none CSS技巧。
  • PHPMailer会不会给我一个编写email_validator()函数的步骤?
  • PHPMailer会在任何其他时间保存我不得不编写任何自定义函数吗?

谢谢!运气好的话,我很快就会回答问题。洛尔

4 个答案:

答案 0 :(得分:14)

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

使用PHP的内置邮件功能的优点,没有外部库/包装器:

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

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

  • 如果您需要介绍更多 您的电子邮件的复杂性 可以很容易地做到这一点。添加 附件,内嵌图像等 使用PHP普通邮件并不是很有趣 功能。外部图书馆(at 至少好的)有更多 OOPish API。添加附件可以像$message->addAttachment($file);一样简单,无需使用标题等。
  • 外部库更好地隐藏了 丑陋的任务复杂性如 添加附件,角色 编码和内嵌图像。
  • 现在使用库将为您节省时间 不得不在中学习它的麻烦 未来需要的时候 额外的复杂性/功能。
  • 外部库可能是(我是 真的不确定哪些,以及 什么程度)解决某些问题 PHP邮件的漏洞 不

如果我能想到其他任何事情,我一定会加上它。

答案 1 :(得分:1)

这可能不会真正回答你所有的问题,但它也不会伤害,我猜......

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


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

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


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

在2.2.1版的源代码中,你会发现这样的东西:

class.phpmailer.php,功能AddAnAddress,第413行,您会看到:

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 :(得分:1)

正如Pascal MARTIN所说,发送电子邮件并不像有些人认为的那样简单直接。直接回答你的问题。是的PHPMailer确实做了一些验证,但它不是超级先进的,但应该足以满足您的需求。 PHPMailer将为您节省一些时间,具体取决于您需要的自定义功能。有些事情需要考虑:

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

除了PHPMailer之外,Zend_Mail是一个很好的结账(它是Zend Framework的一部分)。然而,对于简单的联系表格,这可能有点多。

答案 3 :(得分:0)

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