Проверка на спам перед отправкой с использованием Zend_Mail - PullRequest
2 голосов
/ 21 января 2011

Я использую 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.

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Если вы хотите использовать 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.
0 голосов
/ 21 января 2011

Я предполагаю, что вы хотите смоделировать проверку на спам на стороне получателя. Это интересная идея, но учтите, что результаты, которые она даст вам, будут далеко не на 100% реалистичными. В конце концов, именно процесс отправки добавляет большую часть важной информации, которая помогает определить, является ли электронная почта спамом (например, IP-адрес отправителя и маршруты.)

В любом случае, для этого вам, вероятно, придется реализовать собственный класс Zend_Mail_Transport, основанный на примере Zend_Mail_Transport_Smtp. Любые данные, которые транспортный класс отправляет на SMTP-сервер, вам придется перенаправить в текстовый файл. Насколько я вижу беглым взглядом, это будет немного работы, но не невозможно.

...