【问题标题】:Spam check before sending using Zend_Mail使用 Zend_Mail 发送前的垃圾邮件检查
【发布时间】:2011-06-13 01:11:40
【问题描述】:

我正在使用Zend_Mail 和以下代码发送我的电子邮件。

$mail = new Zend_Mail('UTF-8');
$mail ->setBodyText($plainBody)
   ->setBodyHtml($htmlBody)
   ->setSubject($subject)
   ->setFrom(FROM_ADDR, FROM_NAME)
   ->addTo($email, $name )
   ->addHeader(MY_HEADER, serialize( array( 'foo' => 'bar' ) ) )
;

我需要检查准备好的邮件的垃圾邮件评级,我想使用 SpamAssassin 来完成。

我想创建一个包含内容的文件并运行诸如exec('spamc $filename') 之类的东西,但是如何获取包含完整 MIME 正文的文件内容? 我注意到 Zend_Mail_Abstract 类 (library/Zend/Mail/Transport/Abstract.php) 中有一个 _buildBody() 函数返回它,但这是一个 protected 函数。

谢谢

【问题讨论】:

  • 不要在你必须假设 spamassassin 可能不喜欢它们的地方发送电子邮件......
  • 你说得对,但我不知道内容。这是一个所见即所得的时事通讯应用程序,用户应该能够检查他的消息是否可以被视为垃圾邮件。

标签: php zend-framework spam zend-mail


【解决方案1】:

如果您想使用 SpamAssasin,请通过 spamc 运行您的电子邮件:

http://spamassassin.apache.org/full/3.1.x/doc/spamc.html

Spamc 是 spamc/spamd 对的客户端。它应该用于 spamassassin 在脚本中处理邮件的位置。它将读取 来自 STDIN 的邮件,并将其假脱机到其与 spamd 的连接,然后读取 结果返回并将其打印到 STDOUT。 Spamc 具有极低的 加载的开销,所以它应该比加载快得多 整个 spamassassin 程序。

您可以通过以下方式在 PHP 中使用:

  1. 将消息写入临时文件并运行shell_exec('spamc < message.tmp'),或
  2. 使用proc_open() 运行命令,然后通过STDIN 发送消息。

【讨论】:

    【解决方案2】:

    我假设您想在收件人端模拟垃圾邮件检查。这是一个有趣的想法,但请注意,它给您的结果远非 100% 现实。毕竟,发送过程添加了许多有助于确定电子邮件是否为垃圾邮件的重要信息(例如发件人 IP 和路由。)

    无论如何,要做到这一点,您可能必须基于Zend_Mail_Transport_Smtp 的示例实现自定义Zend_Mail_Transport 类。传输类发送到 SMTP 服务器的任何数据,您都必须重新路由到文本文件。就我粗略的一瞥而言,这将是一项艰巨的工作,但并非不可能。

    【讨论】:

    • 是的,我想模拟一下。简而言之,我需要真实发送我的信息,对吗?将其发送本地地址www-data(php 运行用户)并将其存储在 Maildir 中可能是一个想法?
    • @Fabio 将其发送到本地地址可能是最简单的方法。或者,如前所述,Zend 的封装确实可以编写自定义Zend_Mail_Transport
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2012-03-06
    • 2011-01-24
    • 2020-10-29
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多