плохо работает PEAR::Mail_mime и Mail
пытаюсь реализовать но работает очень плохо
вот мой код
Код:
require_once(ROOT."/core/PEAR/Mail.php");
require_once(ROOT."/core/PEAR/Mail/mime.php");
// инициализация основных данных
$subject = "Test MIME сообщение ".$Application->vars['mail_driver'];
$text = "Test Messege.\r\nЯ есть тестовое сообщение\r\nNew test of PEAR::Mail";
$html = "<html><body><strong>Test Messege</strong><br />Я есть тестовое сообщение<br />New test of PEAR::Mail</body></html>";
$to = "test@mail.ru";
// параметры функций библиотеки
$build_params = array(
'html_charset' => $Application->vars['mail_charset'],
'text_charset' => $Application->vars['mail_charset'],
'head_charset' => $Application->vars['mail_charset'],
);
$xtra_headers = array(
'From' => $Application->vars['mail_from_name']." <".$Application->vars['mail_from'].">",
'Subject' => $subject,
);
// инициализация Mail_mime
$mime = new Mail_mime();
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
// получаю данные в формате mail mime
$body = $mime->get($build_params);
$headers = $mime->headers($xtra_headers);
// параметры для соединения по SMTP
$param = null;
if ($Application->vars['mail_driver']=="smtp"){
$param = array(
'host' => $Application->vars['mail_server'],
'port' => $Application->vars['mail_port'],
'auth' => true,
'username' => $Application->vars['mail_username'],
'password' => $Application->vars['mail_password'],
);
}
// отправка запроса
$mail = Mail::factory($Application->vars['mail_driver'], $param);
$status = $mail->send($to, $headers, $body);
// проверка результата
if (PEAR::isError($status)){
echo $status->getMessage();
} else {
echo "Message successfully sent!";
}
require_once(ROOT."/core/PEAR/Mail/mime.php");
// инициализация основных данных
$subject = "Test MIME сообщение ".$Application->vars['mail_driver'];
$text = "Test Messege.\r\nЯ есть тестовое сообщение\r\nNew test of PEAR::Mail";
$html = "<html><body><strong>Test Messege</strong><br />Я есть тестовое сообщение<br />New test of PEAR::Mail</body></html>";
$to = "test@mail.ru";
// параметры функций библиотеки
$build_params = array(
'html_charset' => $Application->vars['mail_charset'],
'text_charset' => $Application->vars['mail_charset'],
'head_charset' => $Application->vars['mail_charset'],
);
$xtra_headers = array(
'From' => $Application->vars['mail_from_name']." <".$Application->vars['mail_from'].">",
'Subject' => $subject,
);
// инициализация Mail_mime
$mime = new Mail_mime();
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
// получаю данные в формате mail mime
$body = $mime->get($build_params);
$headers = $mime->headers($xtra_headers);
// параметры для соединения по SMTP
$param = null;
if ($Application->vars['mail_driver']=="smtp"){
$param = array(
'host' => $Application->vars['mail_server'],
'port' => $Application->vars['mail_port'],
'auth' => true,
'username' => $Application->vars['mail_username'],
'password' => $Application->vars['mail_password'],
);
}
// отправка запроса
$mail = Mail::factory($Application->vars['mail_driver'], $param);
$status = $mail->send($to, $headers, $body);
// проверка результата
if (PEAR::isError($status)){
echo $status->getMessage();
} else {
echo "Message successfully sent!";
}
собственно код ничего особенного из себя не представляет
тоже самое вы найдете в любой статье про Mail_mime
так вот проблема следующая
1. не удается указать имя отправителя на русском языке
возникает ошибка на уровне пакета
Цитата:
Validation failed for: =?windows-1251?Q?=C0=E2=F2=EE=F1=EB=F3=E6=E1=E0=20?=
2. частенько возникают глюки с отправкой через smtp
минут по 5 думает а потом возвращает белый экран
ни ошибок, ни предкприждений. просто белый экран и я никак немогу понять как мне если не предотвратить эту ошибку,
то хотябы вернуть пользователю крректную информацию об ошибке
ps почту отправляю через smtp.mail.ru
3. сейчас возник еще один странный глюк
когда отправляю через функцию mail() то мне приходит письмо с пустым телом, тоесть все заголовки есть, а тела письма нет
читал что народ пишет по этому поводу
говорят что пользоваться библиотекой PEAR::Mail вовсе не обязательно
можно пользоваться стандартными методами
попробовал, но тоже ничего не получилось
Код:
mail($to, $subject,
"--=_ff9387f0b4bb813c17677f820e1db150
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=\"windows-1251\"
Test Messege.
New test of PEAR::Mail
Mail on http://mesi.ru
--=_ff9387f0b4bb813c17677f820e1db150
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=\"windows-1251\"
<html><body>
<strong>Test Messege</strong><br>
New test of PEAR::Mail<br>
Mail on http://mesi.ru<br>
</body></html>
--=_ff9387f0b4bb813c17677f820e1db150--",
"MIME-Version: 1.0
From: Автослужба <web@mesi.ru>
Content-Type: multipart/alternative;boundary=\"=_ff9387f0b4bb813c17677f820e1db150\"");
"--=_ff9387f0b4bb813c17677f820e1db150
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=\"windows-1251\"
Test Messege.
New test of PEAR::Mail
Mail on http://mesi.ru
--=_ff9387f0b4bb813c17677f820e1db150
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=\"windows-1251\"
<html><body>
<strong>Test Messege</strong><br>
New test of PEAR::Mail<br>
Mail on http://mesi.ru<br>
</body></html>
--=_ff9387f0b4bb813c17677f820e1db150--",
"MIME-Version: 1.0
From: Автослужба <web@mesi.ru>
Content-Type: multipart/alternative;boundary=\"=_ff9387f0b4bb813c17677f820e1db150\"");
тоже приходит пустое тело
можно же для почты использовать внешнюю софтину (например, тот же sendmail); и обрабатывать уже ее ошибки, если какие-то проблемы с доставкой и т.п.
размещение подобных "крох" на веб-сервере вообще не проблема, да и размер кода для обработки почты перлом сократится до 7-8 строк
если надо могу и сам код привести..
на мой взгляд использование внешних программ для отправки почты не самый лучший вариант
да и обработка ошибок будет более эффективной при прямом обращении к почтовому серверу
хотя я могу ошибаться
где-то вроде мне попадалось упоминание о том, что некорректное определение имени отправителя это баг который совершил разработчик пакета
хотя я к сожаленью не помню где об этом упоминалось и как это лечить
страсти накаляются
стук клавиш оглушает все вокруг
каждый хочет высказаться
ну как же так, а вдруг его не услышат в шуме толпы
мнение каждого важно и бесценно
и вот пошли уже капсы
многозначительные смайлы
и стройные ряды восклицательных знаков
великие гуру все больше входят в транс
молодняк бьется в истерике
дебаты развернулись не на шутку
только бы форум выдержал такой натиск
вот уже 2 недели прошло с момента последнего ответа