|
|
|
| Привет всему вашему сообществу. Столкнулся с такой проблемой, уже совсем из рук выбился - отправляю MIME письмо с HTML с вложенными изображениями. Изображениям присваиваю Content-ID и затем обращаюсь к ним в теле HTML для вывода изображений. Суть проблемы в том, что почтовые клиенты не всегда правильно отображают изображения. В основном это почтовые web-движки. Остальные программы типа Outlook Express, Outlook из Offic'a всё отображают просто супер. Специально зарегил себе ящики на mail, rambler, ya.ru - из них более-менее отображает mail.ru. Яндекс отображает только <img src='cid:x'>, но не отображает backround='cid:y'. Rambler и ящик моего провайдера вообще ничего...
Привожу код и заголовки
function SendEmail ($smtp_server, $smtp_port, $smtp_login, $smtp_pass, $to, $from, $subject, $message, $attach) {
global $email_errors;
set_time_limit(120);
# соединяемся с сервером
if (!$smtp_socket = @fsockopen($smtp_server, $smtp_port, $errno, $errstr, 30)) {
$email_errors = "yes";
} else {
# Определяем заголовки
$subject = "=?Windows-1251?B?".base64_encode($subject)."?="; // кодим subject под win-1251
$headers = "Subject: $subject\r\nFrom: $from\r\nTo: $to\r\n";
# формируем аттачи
if (!empty($attach)) {
# присоединям HTML сообщние
$boundary = md5(uniqid(time()));
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$multipart .= "--$boundary\n";
$multipart .= "Content-Type: text/html; charset=windows-1251\n";
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
$multipart .= "$message\n";
$message_part = "";
# присоединям сами изображения и cid
foreach ($attach as $i => $path) {
# открываем файл
if (!$fp = fopen($path, "r")) {
exit;
}
$file = fread($fp, filesize($path));
fclose($fp);
$message_part .= "--$boundary\n";
$message_part .= "Content-Type: image/gif; name=\"Image".$i."\"\n";
$message_part .= "Content-Transfer-Encoding: base64\n";
$message_part .= "Content-ID: <Image".$i.">\n";
$message_part .= "Content-Disposition: attachment; filename=\"Image".$i.".gif\"\n\n";
$message_part .= chunk_split(base64_encode($file))."\n";
}
$multipart .= $message_part."--$boundary--\n";
} else {
$headers .= "Content-Type: text/html; charset=windows-1251\r\nContent-Transfer-Encoding: 8bit";
$multipart = "\r\n\r\n".$message;
}
# сообщение сервера после соединения
while ($line = fgets($smtp_socket, 515)) {
$smtp_msg .= $line;
if (substr($line, 3, 1) == " ") {
break;
}
}
$email_errors = "";
$answer = substr($smtp_msg, 0, 3);
if($answer != '220') $email_errors = $answer." ";
# посылаем команды серверу (HELO, FROM, TO, DATA и тд)
fclose($smtp_socket); // закрываем соединение
}
}
|
Заголовки
Return-Path: <bangerson@comtv.ru>
X-UCL: actv
Received: from [10.2.12.210] (account bangerson HELO )
by comtv.ru (CommuniGate Pro SMTP 4.1.8)
with SMTP id 16861182 for [email]bangerson@comtv.ru[/email]; Mon, 08 Jan 2007 19:40:22 +0300
Subject: =?Windows-1251?B?wu7x8fLg7e7i6+Xt6OUg7+Dw7uv/IO3gIFdpbk1vZGRpbmcucnU=?=
From: [email]bangerson@comtv.ru[/email]
To: [email]bangerson@comtv.ru[/email]
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="f449a3e18d44a161aaecca8f90052b52"
Date: Mon, 08 Jan 2007 19:40:22 +0300
Message-ID: <auto-000016861182@comtv.ru>
--f449a3e18d44a161aaecca8f90052b52
Content-Type: text/html; charset=windows-1251
Content-Transfer-Encoding: Quot-Printed
<html>
<head>
</head>
<body bgcolor='#F0FBFF' style='margin: 8px; font-family: Tahoma, Verdana, Tahoma,
<img src='cid:Image1' align='bottom' hspace='2'>
<img src='cid:Image2' align='bottom' hspace='2'>
<img src='cid:Image3' align='bottom' hspace='2'>
</body>
</html>
--f449a3e18d44a161aaecca8f90052b52
Content-Type: image/gif; name="Image0"
Content-Transfer-Encoding: base64
Content-ID: <Image0>
Content-Disposition: attachment; filename="Image0.gif"
base64_encode image
--f449a3e18d44a161aaecca8f90052b52
Content-Type: image/gif; name="Image1"
Content-Transfer-Encoding: base64
Content-ID: <Image1>
Content-Disposition: attachment; filename="Image1.gif"
base64_encode image
--f449a3e18d44a161aaecca8f90052b52
Content-Type: image/gif; name="Image2"
Content-Transfer-Encoding: base64
Content-ID: <Image2>
Content-Disposition: attachment; filename="Image2.gif"
base64_encode image
--f449a3e18d44a161aaecca8f90052b52--
|
И есть ещё у меня пример заголовков от письма, которое лично у меня отображается нормально. Выкладываю текстом: http://www.zel-writers.net.ru/headers.txt. Пробовал делать в точности как там, но что-то совсем никак не клеится.
Подскажите как бороться с таким маразмом ? | |
|
|
|
|
|
|
|
для: NIK
(08.01.2007 в 19:50)
| | попробуйте
1. поменять Content-Type внешнего тела сообщения с multipart/mixed на multipart/related
2. ограничить значения атрибутов тегов (в данном случае <img src=...) не апострофами, а кавычками. | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2007 в 20:32)
| | Trianon, огромное спасибо, помогло! Правда фон так и не выводится, видимо так устроены web-почтовики, а с картинками всё хорошо. | |
|
|
|