Почтовый клиент не определяет Content-ID

Статус
В этой теме нельзя размещать новые ответы.

HefneR

Новичок
Почтовый клиент не определяет Content-ID

Привет всему вашему сообществу. Столкнулся с такой проблемой, уже совсем из рук выбился - отправляю 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 и ящик моего провайдера вообще ничего...

Привожу код и заголовки

PHP:
function SendEmail (...) {
  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\n
                            Content-Transfer-Encoding: 8bit";
      $multipart = "\r\n\r\n".$message;
    }

    # посылаем команды серверу (HELO, FROM, TO, DATA и тд)

    fclose($smtp_socket); // закрываем соединение
  }
}
Заголовки

Код:
Return-Path: <[email protected]>
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][email protected][/email]; Mon, 08 Jan 2007 19:40:22 +0300
Subject: =?Windows-1251?B?wu7x8fLg7e7i6+Xt6OUg7+Dw7uv/IO3gIFdpbk1vZGRpbmcucnU=?=
From: [email][email protected][/email]
To: [email][email protected][/email]
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="f449a3e18d44a161aaecca8f90052b52"
Date: Mon, 08 Jan 2007 19:40:22 +0300
Message-ID: <[email protected]>

--f449a3e18d44a161aaecca8f90052b52
Content-Type: text/html; charset=windows-1251
Content-Transfer-Encoding: Quot-Printed

              <html>
               <head>
               </head>
               <body>              
                <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. Пробовал делать в точности как там, но что-то совсем никак не клеится.

Подскажите как бороться с таким маразмом ?
 

Фанат

oncle terrible
Команда форума
отредактируй сообщение и убери из него кучу кода.
чтобы нормально влезало в экран.
 

440hz

php.ru
Content-ID: <Image0>

нету у тебя в HTML cid:Image0 + используй двойные кавычки.
<img src="cid:Image1">

HTML надо кодировать =3d
Content-Transfer-Encoding: quoted-printable (а у тебя что?)
<BODY bgColor=3D#ffffff>

хотя я в сво время поймал на этом глюк с переносом строки и стал кодировть все в base64. тогда все показывается нормально.
 

Фанат

oncle terrible
Команда форума
Тема закрыта.

Формулируйте вопрос так, чтобы его могли понять не только Вы.
Не пишите больше 10-15 строк кода.
Никто не будет вникать в Ваш код длиной 100 строк.
Правила форума: http://phpclub.ru/talk/announcement.php?s=&forumid=12
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху