Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почтовый клиент не признает Content-ID
 
 автор: NIK   (08.01.2007 в 19:50)   письмо автору
 
 

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

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

   
 
 автор: Trianon   (08.01.2007 в 20:32)   письмо автору
 
   для: NIK   (08.01.2007 в 19:50)
 

попробуйте
1. поменять Content-Type внешнего тела сообщения с multipart/mixed на multipart/related
2. ограничить значения атрибутов тегов (в данном случае <img src=...) не апострофами, а кавычками.

   
 
 автор: NIK   (08.01.2007 в 21:31)   письмо автору
 
   для: Trianon   (08.01.2007 в 20:32)
 

Trianon, огромное спасибо, помогло! Правда фон так и не выводится, видимо так устроены web-почтовики, а с картинками всё хорошо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования