Исправление ошибки с поддержкой VERP в PHPMailer
Великая сила пробела
PHPMailer — класс для отправки почты из PHP; используется многими известными приложениями, в том числе и WordPress.
VERP — техника, упрощающая автоматическое определение и удаление email-адресов из списков рассылки, сообщения которым не могут быть доставлены.
Поддержка VERP в PHPMailer хоть и реализована, но не работает.
Следующий лог сессии с SMTP-сервером это демонстрирует:
In: EHLO example.com
Out: 250-example.com
Out: 250-PIPELINING
Out: 250-SIZE 10240000
Out: 250-ETRN
Out: 250-XVERP
Out: 250-ENHANCEDSTATUSCODES
Out: 250-8BITMIME
Out: 250 DSN
In: MAIL FROM:<mailer@example.com>XVERP
Out: 501 5.1.7 Bad sender address syntax
In: RSET
Out: 250 2.0.0 Ok
Мы видим, что сервер поддерживает VERP (250-XVERP), но серверу не нравится строка MAIL FROM. И действительно, в ней есть маленькая ошибка: перед XVERP отсутствует пробел.
Добавление пробела исправляет ситуацию:
EHLO example.com
250-example.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-XVERP
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM:<mailer@example.com> XVERP
250 2.1.0 Ok
RSET
250 2.0.0 Ok
QUIT
221 2.0.0 Bye
Исправление является тривиальным: в файле class.smtp.php находим строку
и заменяем её на
Для тех, кому проще иметь дело с патчами:
+++ class.smtp.php.new
@@ -604,7 +604,7 @@
return false;
}
- $useVerp = ($this->do_verp ? "XVERP" : "");
+ $useVerp = ($this->do_verp ? " XVERP" : "");
fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF);
$rply = $this->get_lines();
Патч для WordPress можно найти здесь.
Связанные записи
Автор: Vladimir; опубликовано в: PHP; метки: PHP, PHPMailer, WordPress, ошибка, патчФев
2010


Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.





