Лечим связку WordPress&Godaddy&отправка почты
Все правки делались в class-phpmailer.php
Не люблю я править код WordPress, но если уже ничего не помогает, то приходится вмешиваться. Для начала обязательно указать ваш реально существующий ящик в переменную
var $Sender = «blablabla@bla.com»;
Нужно это для хитро настроенных почтовых серверов получателей, которые проверяют существует ли отправитель на самом деле. Типа защита от спама. Если не указать отправителя, то при отправке письма сервер хостера сам подставит какой ему вздумается ящик и сервер получателя такое письмо не пропустит. Пример адреса если мы его не задаём: Return-Path:val34334@p3slh209.shr.phx3.secureserver.net. Естественно такого почтового адреса не существует.
Далее обнаружен глюк у хостинга godaddy.com
В соответствии с RFC 2822 WordPress разбивает тему письма на фрагменты не превышающие 78байт. Но опытным путём выяснилось, что если фрагментов больше чем 1, то godaddy делает вид что письмо ушло, а сам его херит в неизвестном направлении.
Для этого пришлось обрезать сообщение subject до длины, не превышающей 1 фрагмента. Тупо 35байт указал наугад. Да тема теперь не всегда информативна, но что делать, лучше пусть так чем никак. Для обрезания темы опять же вставляем следующий код чуть выше функции function EncodeHeader:
if (strlen($string) <= $len) {
return $string;
}
if ((ord($string[$len]) < 0×80) || (ord($string[$len]) >= 0xC0)) {
return substr($string, 0, $len);
}
while (--$len >= 0 && ord($string[$len]) >= 0×80 && ord($string[$len]) < 0xC0) {};
return substr($string, 0, $len);
} //Далее находим строчку:
$x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
//И вставляем перед ней:
$str = $this->truncate_bytes($str, 35);
На этом всё.