За последние 24 часа нас посетили 15023 программиста и 1763 робота. Сейчас ищут 1564 программиста ...

Некорректное отображение писем в веб-интерфейсах

Тема в разделе "Работа с почтой", создана пользователем RegEditor, 18 окт 2010.

  1. RegEditor

    RegEditor Активный пользователь

    С нами с:
    18 окт 2010
    Сообщения:
    1
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    У меня возникла проблема. Через mail() отправляется письмо с двумя аттачами-картинками. Письмо нормально отправляется, нормально приходит. Но если его смотреть через Outlook, The Bat!, гугловский веб-интерфейс - то все нормально. Проблемы начинаются с нашими почтовиками. Яндекс не совсем корректно показывает форматирование (CSS не воспринимает, похоже), но это ладно бы - он не показывает картинки. То есть аттачи есть, но они почему-то в яндекс приходят зашифрованные в base64. При их сохранении они, соответственно, тоже не открываются (зашифрованные-то)).
    С mail.ru другая беда - он показывает ТОЛЬКО картинки. На наличие текста даже намека нет - ни ссылки, ничего. Якобы только две картинки пришло.
    Подскажите, как с этим бороться?

    Код (Text):
    1.  
    2. <?
    3. function sendletter($to, $subject, $message, $attaches){
    4.   $bound="|||site.ru|||";
    5.   $headers="MIME-Version: 1.0\n";
    6.   $headers.="Content-Type: multipart/related; boundary=\"$bound\"\n";
    7.   $headers.="From: \"site.ru\" <info@site.ru>\n";
    8.   $headers.="To: $to\n";
    9.   $headers.="Subject: $subject\n";
    10.   $body="--$bound\n";
    11.  
    12.   $body.="Content-Type: text/html; charset=\"windows-1251\"\n";
    13.   $body.="Content-Transfer-Encoding: 8bit \n\n";
    14.   $body.=$message;
    15.   $body.="\n\n--$bound\n";
    16.  
    17.   $attachfiles=explode("|",$attaches);
    18.   for($i=0;$i<count($attachfiles);$i++){
    19.     $attach=explode(":",$attachfiles[$i]);
    20.     $body.="Content-Type: ".$attach[2]."; name=\"".basename($attach[0])."\"\n";
    21.     $body.="Content-Transfer-Encoding: base64 \n";
    22.     $body.="Content-ID: <".$attach[1]."> \n\n";
    23.     $f=fopen($attach[0],"r");
    24.     $body.=chunk_split(base64_encode(fread($f,filesize($attach[0]))))." \n";
    25.     if($i<count($attachfiles)-1)$body.="--$bound\n";
    26.     }
    27.   $body.="--$bound-- \n\n";
    28.   return mail($to, $subject, $body, $headers);
    29.   }
    30.  
    31.   $message="
    32.   <html>
    33.   <head>
    34.     <title>Восстановление пароля на site.ru</title>
    35.   </head>
    36.   <body>
    37.   <style>
    38.   body{
    39.     background-color: #F5E6C9;
    40.     margin: 0px;
    41.     font-family: Arial;
    42.     font-size: 12px;
    43.     }
    44.   a:link{text-decoration: underline;}
    45.   a:visited{text-decoration: underline;}
    46.   a:hover{text-decoration: none;}
    47.   a:active{text-decoration: none;}
    48.   </style>
    49.   <body>
    50.   <table width=\"500\" cellpadding=\"3\" cellspacing=\"0\" border=\"0\" align=\"center\">
    51.   <tr valign=\"bottom\" style=\"padding-top: 10px;\">
    52.     <td><img src=\"cid:logo\"><br><img src=\"cid:door\"></td>
    53.     <td style=\"text-align:right; color: #333333;\">
    54.     <span style=\"font-size: 24px; color: #422609;\">site.ru</span><br><br>
    55.     <b>Ваш логин:</b> ".$data["login"]."<br>
    56.     <b>Ваш пароль:</b> ".$data["password"]."
    57.     </td>
    58.   </tr>
    59.   <tr>
    60.     <td colspan=\"2\" style=\"padding-top: 12px;\">
    61.     Ваш пароль успешно восстановлен. Если Вы не пользовались сервисом восстановления пароля на сайте, сообщите об этом администрации сайта.<br><br>
    62.     С уважением,<br>команда <a href=\"http://www.site.ru\" style=\"color: #000000;\">site.ru</a>
    63.     </td>
    64.   </tr>
    65.   </table>
    66.   </body>
    67.   </html>
    68.   ";
    69.  
    70. sendletter("test@mail.ru","test letter", $message, "src/gold-title.jpg:logo:image/jpeg|782822.jpg:door:image/jpeg");
    71. ?>