Поврежденное изображение при отправке электронного письма с вложенным изображением с помощью php mail () - PullRequest
1 голос
/ 10 июня 2011

Я следую примеру отправки электронной почты с вложенным изображением по почте ().Письмо отправляется нормально, а изображение прикреплено, но когда я пытаюсь открыть изображение, браузер сообщает, что оно повреждено.Я сохранил изображение и открыл его в текстовом редакторе, а содержимое по-прежнему находится в base64, как показано в следующем фрагменте файла: http://pastebin.com/B2VgarH8

Строка Content-Transfer-Encoding: base64, которую я предполагаю, говоритбраузер интерпретирует изображение, но оно ничего не делает.Я пытался открыть его в Firefox и Chrome, и это тот же результат.У кого-нибудь есть идея, почему он не работает?

$to = 'admin@hostoi.com';
$subject = $matches[3][$i];
$bound_text = "AbC123";
$bound = "--".$bound_text."\r\n";
$bound_last = "--".$bound_text."--\r\n";
$headers = "From: me@gmail.com\r\n";
$headers .= "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$bound_text\"";
$message = "If you can see this MIME than your client doesn't accept MIME types!\r\n" . $bound;
$message .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n" .
    "Content-Transfer-Encoding: 7bit\r\n\r\n" . (string)$matches[5][$i] . "\r\n" . $bound;

$attachment = chunk_split(base64_encode(file_get_contents($matches[1][$i])));
$attachment_ext = substr(strrchr($matches[1][$i], '.'), 1);
$attachment_ext = $attachment_ext == 'jpg' ? 'jpeg' : $attachment_ext;
$attachment_name = time() . "_" . rand(10,99) . "." . $attachment_ext;

$message .= "Content-Type: image/$attachment_ext; name=\"$attachment_name\"\r\n" .
    "Content-Transfer-Encoding: base64\r\n" .
    "Content-disposition: attachment\r\n\r\n" .
    chunk_split(base64_encode($attachment)) . $bound_last;

if(mail($to, $subject, $message, $headers)) {
    echo 'MAIL SENT';
    //mysql_query("INSERT INTO message(body) VALUES(" . mysql_real_escape_string($matches[5][$i]) . ")", $dbh);
} else {
    echo 'MAIL FAILED';
}

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Я обнаружил проблему. Я вызываю base64_encode () дважды, один раз при создании $ attachment и снова в сообщении $, что делает его дважды закодированным. Когда электронное письмо читается клиентом, оно декодируется только один раз, поэтому оно выглядит поврежденным. Теперь он работает фантастически.

0 голосов
/ 10 июня 2011

Взгляните на PHPMailer - это класс, который может легко прикреплять изображения.

...