提问人:Jeff 提问时间:8/13/2009 更新时间:8/13/2009 访问量:15816
PHPMailer v. mail() 用于简单的联系表单
PHPMailer v. mail() for a simple Contact Form
问:
我是PHP的新手,但对事物有一定的掌握(还没有学过课程)。
问题:
选择哪个?PHPMailer 或 mail() 用于我的新联系表单。
形式很简单:
Your name:
Your email:
Subject:
Body:
我每天大约有 2,000 名访客,每天收到大约 10 份提交,所以我不需要任何太花哨的东西。=)
我脑海中的杂项问题:
- PHPMailer 是否会更好地保护我的联系表免受 CC:注入(主要问题)?我已经知道诀窍了。
anti-spambot display:none CSS
- PHPMailer 会为我省去编写函数的步骤吗?
email_validator()
- PHPMailer 会为我节省任何其他编写自定义函数的时间吗?
谢谢!如果运气好的话,我很快就会回答问题。不。
答:
PHPMailer 是我的选择,因为它允许我向谷歌发送 SMTP 电子邮件,而无需安装任何库或配置邮件服务器,这样我就不必担心与垃圾邮件相关的问题。
评论
这是我一口气能想到的一切,如果有任何明显的遗漏,请原谅我。
使用 PHP 内置的邮件函数的优点,无需外部库/包装器:
- 你不需要任何东西 PHP的。
- 您无需学习新的 API。
- 您不必担心 PHP 升级之类的破坏脚本。
- 您不必担心 更新版本不适用于您的 PHP安装。
- 您不必担心 潜在的安全漏洞 使用该脚本的结果。
- 如果这是一项简单的任务,你就完成了 几分钟后。
使用外部库/包装器的优点:
- 如果需要介绍更多
复杂性融入您的电子邮件,您
可以很容易地做到这一点。添加
附件、内联图像等
使用PHP纯邮件没什么乐趣
功能。外部库(位于
最少好的)有一个更多的
OOPish API。添加附件可以像玩弄标题等一样简单。
$message->addAttachment($file);
- 外部库最好隐藏 任务的丑陋复杂性,例如 添加附件、字符 编码和内联图像。
- 现在使用库将为您节省 必须在 未来,当您确实需要 额外的复杂性/功能。
- 可能外部库(我是 真的不确定是哪些,以及 什么程度)解决某些 PHP邮件的漏洞 不。
如果我能想到其他什么,我一定会添加它。
评论
这可能不会真正回答你所有的问题,但也不会有什么坏处,我想......
无论你想做什么,我都不会使用 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 并不是唯一存在的解决方案;还有很多其他的,例如:
- Zend_Mail
- Rmail for PHP(以前称为 HTML Mime Mail)
- Swift 邮件
正如 Pascal MARTIN 所提到的,发送电子邮件并不像某些人想象的那么简单明了。直接回答您的问题。是的,PHPMailer确实做了一些验证,但它不是超级高级的,但应该足以满足你的使用。PHPMailer 将为您节省一些时间,具体取决于您需要哪些自定义函数。不过,需要考虑以下几点:
- HTML 与纯文本。如果电子邮件只发送给您,这可能没什么大不了的。但是,如果您曾经向用户发送电子邮件(例如确认电子邮件),则希望能够同时支持 HTML 和纯文本客户端。PHPMailer(和Zend_Mail)使这变得非常容易。
- SMTP 中。如果您向用户发送电子邮件,这是另一个非常重要的问题,但如果它只是发送给您自己的电子邮件,则不那么重要。使用 php 的常规 mail() 函数,电子邮件将通过 sendmail 发送,几乎所有 *nix 安装都带有开箱即用的 sendmail(尤其是服务器)。因此,垃圾邮件过滤器对它不是很友好。如果您设置了具有受信任 MX 记录的常规 SMTP 服务器(或者您有 gmail 帐户),则可以使用 SMTP 发送邮件,这将有助于减少您的邮件被标记为垃圾邮件的机会。
除了 PHPMailer 之外,Zend_Mail 也是一个很好的检查对象(它是 Zend 框架的一部分)。但是,对于简单的联系表格来说,这可能有点多。
评论