|
|
|
|
|
для: DDK
(01.02.2012 в 17:48)
| | Всё, разобрался. Вот правильный код:
<?
public function send_mail(
$name_to, // имя получателя
$email_to, // email получателя
$subject, // тема письма
$body, // текст письма
$html = FALSE // письмо в виде html или обычного текста
)
{
$name_from = $this->sendmail_config['sender_name'];
$email_from = $this->sendmail_config['sender_email'];
$data_charset = 'UTF-8'; // кодировка переданных данных
$send_charset = 'UTF-8'; // кодировка письма
$to = '"' . $this->mime_header_encode($name_to, $data_charset, $send_charset) . '" <' . $email_to . '>';
$subject = $this->mime_header_encode($subject, $data_charset, $send_charset);
$from = '"' . $this->mime_header_encode($name_from, $data_charset, $send_charset) .'" <' . $email_from . '>';
if($data_charset != $send_charset)
{
$body = iconv($data_charset, $send_charset, $body);
}
$headers = "From: " . $from . "\r\n";
$type = ($html) ? 'html' : 'plain';
$headers .= "Reply-To: " . $from . "\r\n";
$headers .= "Return-Path: " . $from . "\r\n";
$headers .= "Content-type: text/" . $type . "; charset=\"" . $send_charset . "\"\r\n";
$headers .= "Mime-Version: 1.0\r\n";
$headers .= "X-Mailer: " . $name_from . " PHP Mailer\r\n";
$headers .= "X-Priority: 3\r\n";
$headers .= "X-MSMail-Priority: Normal\r\n";
if( !DEBUG_SYSTEM )
mail($to, $subject, $body, $headers);
if( $this->sendmail_debug )
{
$this->mail_debug($to, $subject, $body, $headers);
}
return;
}
private function mime_header_encode($str, $data_charset, $send_charset)
{
if($data_charset != $send_charset)
{
$str = iconv($data_charset, $send_charset, $str);
}
return '=?' . $send_charset . '?B?' . base64_encode($str) . '?=';
}
?>
|
Загвоздка была в потерявшихся кавычках. Имя отправителя и кодировку в заголовках надо заключать в кавычки:
<?
...
$to = '"' . $this->mime_header_encode($name_to, $data_charset, $send_charset) . '" <' . $email_to . '>';
$from = '"' . $this->mime_header_encode($name_from, $data_charset, $send_charset) .'" <' . $email_from . '>';
...
$headers .= "Content-type: text/" . $type . "; charset=\"" . $send_charset . "\"\r\n";
...
?>
|
| |
|
|
|
|
|
|
|
для: DDK
(02.02.2012 в 00:32)
| | И проблема с не доходящими письмами возвращается сразу, как только добавляешь всего одну строку:
$subject = "=?utf-8?B?" . base64_encode($subject) . "?=";
|
| |
|
|
|
|
|
|
|
для: ladan
(01.02.2012 в 19:57)
| | Да, только так кириллический заголовок письма (хоть он и в юникоде) херится, превращаясь в белиберду. | |
|
|
|
|
|
|
|
для: DDK
(01.02.2012 в 17:48)
| |
<?
$mail = "";
$subject = "";
$message = "";
$headers = "From: site.ru <admin@site.ru>\r\ncontent-type:text/plain; charset=utf-8\r\n";
mail ($mail, $subject, $message, $headers);
?>
|
| |
|
|
|
|
|
|
| Приветствую!
Ищу пример валидных заголовков для отправки почты функцией mail().
Контент изначально в UTF-8, русский, в формате HTML. Сейчас используется следующая функция, но письма многим совсем не доходят, а у большинства сразу попадают в спам (и дело точно не в репутации домена):
public function send_mail(
$name_to, // имя получателя
$email_to, // email получателя
$subject, // тема письма
$body, // текст письма
$html = FALSE // письмо в виде html или обычного текста
)
{
$name_from = $this->sendmail_config['sender_name'];
$email_from = $this->sendmail_config['sender_email'];
$data_charset = 'UTF-8'; // кодировка переданных данных
$send_charset = 'KOI8-R'; // кодировка письма
$to = $this->mime_header_encode($name_to, $data_charset, $send_charset) . ' <' . $email_to . '>';
$subject = $this->mime_header_encode($subject, $data_charset, $send_charset);
$from = $this->mime_header_encode($name_from, $data_charset, $send_charset) .' <' . $email_from . '>';
if($data_charset != $send_charset)
{
$body = iconv($data_charset, $send_charset, $body);
}
$headers = "From: " . $from . "\r\n";
$type = ($html) ? 'html' : 'plain';
$headers .= "Content-type: text/" . $type . "; charset=" . $send_charset . "\r\n";
$headers .= "Mime-Version: 1.0\r\n";
$headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
if( !DEBUG_SYSTEM )
mail($to, $subject, $body, $headers);
return;
}
function mime_header_encode($str, $data_charset, $send_charset)
{
if($data_charset != $send_charset)
{
$str = iconv($data_charset, $send_charset, $str);
}
return '=?' . $send_charset . '?B?' . base64_encode($str) . '?=';
}
|
| |
|
|
|
|