Странен проблем с PhpMailer, Subject полето на кирилица и host.bg

[UPDATED – 28.03.2009]

Не знам дали се случва при всички клиенти на host.bg, но при една моя страница, която се хоства там определено има проблем с изпращането на мейли чрез средствата на PHPMailer [http://phpmailer.codeworxtech.com/index.php ]. При използване на PHP mail() функцията и наличие на думи, написани на кирилица в полето Subject често се появява съобщението за грешка:

Language string failed to load: instantiate

Проблемът явно се случва във файла”phpmailer.php” (/wp-includes/class-phpmailer.php). На редове 435 или 439 функцията mail връща false:

————- Отрязък от кода —————
$rt = @mail($to, $this->EncodeHeader($this->Subject), $body,
$header, $params);
}
else
$rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header);
————- /Отрязък от кода —————

и при последвалата проверка се връща съобщението за грешка:

————- Отрязък от кода —————
if(!$rt)
{
$this->SetError($this->Lang(“instantiate“));
return false;
}
————- /Отрязък от кода —————

След малко разследване се оказа, че проблемът идва от EncodeHeader().

Решението:

Заместете фрагмента $this->EncodeHeader($this->Subject) със следното:
“=?UTF-8?B?”.base64_encode($this->Subject).”?=”

* Със всички написани кавички!

И всичко си идва на мястото 🙂 За щастие класът PHPMail се използва от доста WEB приложения (Joomla, WordPress, различни техни компоненти и т.н.) и корекцията е еднотипна

Инструкцията важи само за WordPress 2.5. При версия 2.7 нещата се случват по друг начин, за който ще пиша по-натам.

One thought on “Странен проблем с PhpMailer, Subject полето на кирилица и host.bg

Leave a Reply

Your email address will not be published. Required fields are marked *