Добрый день, есть php файл с функцией отправки письма. Кодировка UTF-8. Не получается отправить русский текст в сообщении. Вместо сообщения выходят крякозябры.
$name=$_FILES['logotype']['name'];$tmp_name=$_FILES['logotype']['tmp_name'];$file1_size=$_FILES['logotype']['size'];$file1_type=$_FILES['logotype']['type'];$location='./sendedmails/';$dlina_name=strlen($name);$format_name=substr($file1_type,6);#--------------------------------------------------$date_today=date("dmy");$today[1]=date("His");$items22=(string)($date_today);$items23=strval($today[1]);$plus2=$items22.$items23;$news_icon=$plus2.".".$format_name;if(move_uploaded_file($tmp_name,$location.$news_icon)){$step_to_send="1";}else{$step_to_send="0";echo" Ошибка! Не удалось добавить данные.
Проверьте правильность ввода данных и фотографии На главную
";}##########################################################################################$file=$location.$news_icon;// файл$mailTo="komu@mail.ru";// кому$from="otkogo@mail.ru";// от кого$subject="New request in web site olamcom.ru";// тема письма$message="Новое обращение от посетителя";// текст письма#$message = iconv('utf-8','windows-1251', $message); //попытка изменения кодировки$r= sendMailAttachment($mailTo,$from,$subject,$message,$file);// отправка письма c вложениемecho($r)?'Письмо отправлено':'Ошибка. Письмо не отправлено!';//$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка письма без вложения//echo ($r)?'Письмо отправлено':'Ошибка. Письмо не отправлено!';/*** Отправка письма с вложением* @param string $mailTo* @param string $from* @param string $subject* @param string $message* @param string|bool $file - не обязательный параметр, путь до файла** @return bool - результат отправки*/function sendMailAttachment($mailTo,$from,$subject,$message,$file=false){$separator="---";// разделитель в письме// Заголовки для письма$headers="MIME-Version: 1.0\r\n";$headers.="From: $from\nReply-To: $from\n";// задаем от кого письмо$headers.="Content-Type: multipart/mixed; boundary=\"$separator\"";// в заголовке указываем разделитель// если письмо с вложениемif($file){$bodyMail="--$separator\n";// начало тела письма, выводим разделитель$bodyMail.="Content-type: text/html; charset='utf-8'\n";// кодировка письма$bodyMail.="Content-Transfer-Encoding: quoted-printable";// задаем конвертацию письма$bodyMail.="Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n";// задаем название файла$bodyMail.=$message."\n";// добавляем текст письма$bodyMail.="--$separator\n";$fileRead=fopen($file,"r");// открываем файл$contentFile=fread($fileRead,filesize($file));// считываем его до концаfclose($fileRead);// закрываем файл$bodyMail.="Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode(basename($file))."?=\n";$bodyMail.="Content-Transfer-Encoding: base64\n";// кодировка файла$bodyMail.="Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n";$bodyMail.=chunk_split(base64_encode($contentFile))."\n";// кодируем и прикрепляем файл$bodyMail.="--".$separator."--\n";// письмо без вложения}else{$bodyMail=$message;}$result=mail($mailTo,$subject,$bodyMail,$headers);// отправка письмаreturn$result;}?>
Отправить письмо с русскими буквами Приветствую, помогите пожалуйста разобраться с кодировками. Задача в том чтобы можно было через.
Не получается написать индекс с русскими буквами Здравствуйте. Пытаюсь написать индекс с русскими буквами и не получается. L1ГР Выделяет ГР красным.
Не получается отправить письмо Здравствуйте, форумчане. Столкнулся с проблемой: не получается отправить письмо на емайл. На.
Не получается отправить письмо idSmtp1.Host := ‘SMTP.yandex.ru’; idSmtp1.Port := 25; idSmtp1.Username := ‘po4ta0019’; .
function mail_utf8($to,$from,$subject,$message){$subject='=?UTF-8?B?'.base64_encode($subject).'?=';$headers="MIME-Version: 1.0\r\n";$headers.="Content-type: text/plain; charset=utf-8\r\n";$headers.="From: $from\r\n";returnmail($to,$subject,$message,$headers);}// пример использования mail_utf8('to-user@gmail.com','no-reply@example.ru','Заголовок сообщения','Текст сообщения');
Как отослать корректное хтмл-письмо через php на gmail?
Но проблема в том что в ящик приходит неформатированное сообщение в виде текста без стилей и прочего (хотя в теле сообщения, если посмотреть, все на месте). Как сделать так чтобы гугл распознавал сообщение как html?
Не изобретайте велосипед. Пользуйтесь готовыми решениями, например — phpmailer. Тогда процедура отправки будет выглядеть следующим образом:
setFrom('your@email.ru'); // Email отправителя // Можно отправить письмо нескольким адресатам за один раз $recipients = ['first@email.ru', 'second@email.ru', 'third@email.ru']; foreach ($recipients as $recipient) < $mail->addAddress($recipient); //$mail->AddBCC($recipient); // Или можно отправить скрытую копию, чтобы получатели не видели друг друга > $mail->Subject = 'Заголовок письма'; $mail->Body = 'Здесь текст письма в формате html.'; $mail->isHTML(true); // Формат HTML $mail->send();
Хотелось бы понять в чем проблема. Потому что шлем письма из нашего собственного веб-приложения. Интересно что в спаме гугла отображается текст, а когда письмо приходит в инбокс, то все нормально.
Попробуйте вот так quoted_printable_encode(«тело письма hrml») и header
Советы по PHP : Отправка писем при помощи PHP : Прикрепление файла
Письмо, содержащее прикрепленный файл, несколько отличается от простого. В нем добавляются некоторые заголовки, и немного меняется само построение, хотя несомненно само письмо остается текстовым файлом. Но давайте все по порядку.
Одна из особенностей — наличие заголовка Mime-Version.
Этот заголовок указывает стандарт, которому соответствует тело сообщения.
Сообщения, соответствующие MIME обязаны содержать такое поле заголовка со следующим текстом:
Если мы хотим отослать письмо с прикрепленными файлами, то необходимо использовать заголовок
Content-type: multipart/mixed
который обозначает, что письмо состоит из нескольких частей, каждая из которых содержит свой заголовок Content-type.
Для обозначения границы этих частей необходимо использовать параметр boundary, который еще называется маркером границы.
Значением этого параметра может служить любая строка. Но надо учесть, что она должна быть уникальной и не встречалась в теле письма. Иначе письмо может быть неправильно разбито на части.
Если у нас идет часть с текстом, то надо заголовок Content-Transfer-Encoding присвоить значение quoted-printable, либо 7bit, либо 8bit.
Для части с файлом этот заголовок должен быть равен base64.
Заголовок Content-Disposition, присутствующий во второй части, указывает, как почтовой программе следует отобразить данную часть письма. Он может принимать значение attachment (этот участок не является частью письма, а просто прикреплен к нему в виде файла) и inline (включение, которое используется непосредственно в письме, например, картинка, вставляемая в HTML).
В первой части заголовком
Content-type: text/plain; charset="windows-1251"
указали, что это простой текст с кодировкой Windows.
указали, что тип файла — rar-архив, а имя файла — file.rar.
Если отправляем gif-картинку, его Content-type будет выглядеть:
Content-Type: image/gif; name="file.gif"
В случае, если заранее не известно, какой тип файла отправляем, или формат файла не является стандартным, следует заголовку Content-type присвоить значение application/octet-stream.
Прикрепленные файлы должны быть размещены в письме в формате base64. Преобразовать файл в этот формат можно при помощи PHP-функции base64_encode():
// Открываем файл для чтения в бинарном формате $file=fopen("file.zip", "rb"); // Считываем его в строку $str_file $str_file=fread($file,filesize("file.zip")); // Преобразуем эту строку в base64-формат $str_file=base64_encode($str_file);
Теперь переменную $str_file, которая содержит файл, можно вставлять в письмо.
Для окончательного закрепления материала напишем функцию, которая отправляет письмо в HTML-формате по указанному адресату с прикрепленным файлом:
/* $to - адрес получателя письма $from_mail - адрес отправителя письма $from_name - имя отправителя письма $subject - тема письма $message - само сообщение в HTML-формате $file_name - путь к файлу, который надо прикрепить к письму (это может быть имя файла, выбранного в поле ) */ function sendMail($to,$from_mail,$from_name,$subject,$message,$file_name) < $bound="spravkaweb-1234"; $header="From: '$from_name' n"; $header.="To: $ton"; $header.="Subject: $subjectn"; $header.="Mime-Version: 1.0n"; $header.="Content-Type: multipart/mixed; boundary='$bound'"; $body="nn--$boundn"; $body.="Content-type: text/html; charset='windows-1251'\n"; $body.="Content-Transfer-Encoding: quoted-printablenn"; $body.="$message"; $file=fopen($file_name,"rb"); $body.="nn--$boundn"; $body.="Content-Type: application/octet-stream;"; $body.="name=".basename($file_name)."\n"; $body.="Content-Transfer-Encoding:base64n"; $body.="Content-Disposition:attachmentnn"; $body.=base64_encode(fread($file,filesize($file_name)))."n"; $body.="$bound--nn"; if(mail($to, $subject, $body, $header)) < echo "