У меня есть форма которая генерирует и отправляет письмо. В письме текст с формы и приаттаченая картинка. Так вот, в The Bat! картинка видна при получении письма, а в Outlook картинка не открывается. Подскажите в чем может быть проблема?
Код (PHP): $img3 = str_replace('data:image/png;base64,', '', $_POST['img1']); $file_name = $bound.".png"; $body .="Content-Type: image/png; name=".basename($file_name)."\n"; $body .="Content-Transfer-Encoding:base64 \n"; $body .="Content-ID: <str_img_1>\n\n"; $body .=$img3."\n"; $body .="--".$bound."--\n\n"; Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Возможно нарушен стандарт, может кто-то и будет разбираться в твоём коде, ещё и не всё ты показал, но проще сформировать и отправить письмо через https://github.com/PHPMailer/PHPMailer
ну из предложенного в принципе видно, что нарушен стандарт. и да, этого исходника недостаточно для полноты картины. проще использовать именитый отлаженный инструмент, который предлагает Денис.
Код (PHP): if (isset($_POST['img1'])){ $_POST['message'] = str_replace("\r\n", "***", $_POST['message']); $_POST['message'] = substr(htmlspecialchars($_POST['message']), 0, 10000); $_POST['message'] = str_replace("***", "<br/>", $_POST['message']); $_POST['name'] = substr(htmlspecialchars(trim($_POST['name'])), 0, 30); $_POST['company'] = substr(htmlspecialchars(trim($_POST['company'])), 0, 50); $_POST['email1'] = substr(htmlspecialchars(trim($_POST['email1'])), 0, 50); if(empty($_POST['message'])) $_POST['message'] = 'NO TEXT SUBMITTED'; $to = 'test@test.com,'; $subject = 'User '.$_POST['name'].' submitted inquiry'; $bound = strtoupper(uniqid(time())); $headers = "From: ".$_POST['email1']."\n"; $headers .= "Mime-Version: 1.0\n"; $headers .= "Content-Type: multipart/alternative; boundary=".$bound."\n"; $body ="--".$bound."\n"; $body .="Content-type: text/html; charset=\"UTF-8\"\n"; $body .="Content-Transfer-Encoding: 8bit\n\n"; if($_POST['img1'] == "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAYAAAC+ZpjcAAAFi0lEQVR4nO3BAQ0AAADCoPdPbQ43oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBXA/yTAAFLZiwOAAAAAElFTkSuQmCC") { $body .="<html> <head> <title>User ".$_POST['name']." submitted inquiry</title> </head> <body> The inquiry from <b>" .$_POST['name']. "</b>, ".$_POST['company'].", ".$_POST['email1'].". <br/>_____________________________________________________________<br/><br/>" .$_POST['message']. " <br/>_____________________________________________________________<br/><br/>The user has not provided sketch. </body> </html>"; $body .="\n\n--".$bound."\n"; }else{ $body .="<html> <head> <title>User ".$_POST['name']." submitted inquiry</title> </head> <body> The inquiry from <b>" .$_POST['name']. "</b>, ".$_POST['company'].", ".$_POST['email1'].". <br/>_____________________________________________________________<br/><br/>" .$_POST['message']. " <br/>_____________________________________________________________<br/><br/><img src=\"cid:str_img_1\"> </body>. </body> </html>"; $body .="\n\n--".$bound."\n"; $img3 = str_replace('data:image/png;base64,', '', $_POST['img1']); $file_name = $bound.".png"; $body .="Content-Type: image/png; name=".basename($file_name)."\n"; $body .="Content-Transfer-Encoding:base64 \n"; $body .="Content-ID: <str_img_1>\n\n"; $body .=$img3."\n"; $body .="--".$bound."--\n\n"; } mail($to, $subject, $body, $headers); echo '<div style="text-align:center">Thank you very much for your inquiry.</div>'; } Вот мой полный код формирования и отправки сообщения
SkyAn стандарт большой и сложный, по этому есть несколько решений, таких как PHPMailer и другие. Зачем изобретать свою библиотеку для работы с почтой, если можно взять готовую.
тем более такую кривую. например брать подстроку н-ной длины после того как оригинальная строка подверглась конвертации. сходу получаем поломанные строки если подстрока завершилась на середине эскейп-последовательности. при этом строки не кодируются как этого так ожидает протокол а ожидаемый CRLF и вовсе вдруг заменен на LF. в общем ТС юзай готовый класс.