Данный код отправляет письмо в кодировке UTF-8 функцией mb_send_mail()
, поэтому предварительно нужно настроить mbstring:
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
mb_http_output('UTF-8');
mb_language('uni');
date_default_timezone_set('Europe/Moscow');
header('Content-type: text/html; charset=utf-8');
Кодировка файла .php должна быть UTF-8 без BOM.
// Кому.
$to = '=?UTF-8?B?' . base64_encode('Вася Пупкин') . '?= <site@site.com>';
// От кого.
$from = '=?UTF-8?B?' . base64_encode('Иван Петров') . '?= <support@snipp.ru>';
$subject = 'Тема письма';
$body = 'Текст письма';
// Массив с файлами.
$files = array(
__DIR__ . '/logo.png',
__DIR__ . '/image.png',
);
$boundary = md5(uniqid(time()));
// Формирование заголовка письма.
$headers = array(
'Content-Type: multipart/mixed; boundary="' . $boundary . '"',
'Content-Transfer-Encoding: 7bit',
'MIME-Version: 1.0',
'From: ' . $from,
'Date: ' . date('r')
);
// Формирование текста письма.
$message = array(
'--' . $boundary,
'Content-Type: text/html; charset=UTF-8',
'Content-Transfer-Encoding: base64',
'',
chunk_split(base64_encode($body))
);
// Формирование файлов.
foreach ($files as $row) {
if (is_file($row)) {
$name = basename($row);
$fp = fopen($row, 'rb');
$file = fread($fp, filesize($row));
fclose($fp);
$message[] = '';
$message[] = '--' . $boundary;
$message[] = 'Content-Type: application/octet-stream; name="' . $name . '"';
$message[] = 'Content-Transfer-Encoding: base64';
$message[] = 'Content-Disposition: attachment; filename="' . $name . '"';
$message[] = '';
$message[] = chunk_split(base64_encode($file));
}
}
$message[] = '';
$message[] = "--" . $boundary . '--';
$headers = implode("\r\n", $headers);
$message = implode("\r\n", $message);
// Отправка.
mb_send_mail($to, $subject, $message, $headers);
Максимальный размер вложенных файлов
- Яндекс – 25 Мб.
- Mail.ru – 25 Мб.
- Gmail – 25 Мб.
- Rambler – 20 Мб.
Письма не приходят на Mail.ru
Причина этого в том что Mail.ru принял политику безопасности DMARC – https://corp.mail.ru/ru/press/releases/9593/
Это происходит когда в адресе «от кого» указан почтовый ящик @mail.ru (также inbox.ru, list.ru, bk.ru).
Если письмо отправляется от Яндекса, Gmail и т.д. такой проблемы нет. Если письмо отправляется от своего домена то в нем нужно настроить SPF и DKIM записи.
Письма не приходят на Яндекс
Проблема возникает если в заголовках письма есть следующее записи:
Reply-To: mail@site.com
Return-Path: mail@site.com