Проблема с вложением электронной почты в почте () - PullRequest
3 голосов
/ 08 января 2010

Я пытаюсь отправить изображение на свой сервер в виде вложения. Для выполнения этой задачи я использовал следующий скрипт PHP, который захватывает JPG (называемый «php.jpg»), расположенный в каталоге с именем «скриншоты», с моего сервера и отправляет его в виде вложения.

<?php

$path = "screenshots/php.jpg";
$fp = fopen($path, 'r');
do //we loop until there is no data left
{
        $data = fread($fp, 8192);
        if (strlen($data) == 0) break;
        $content .= $data;
      } while (true);
$content_encode = chunk_split(base64_encode($content));


$mime_boundary = "<<<--==+X[".md5(time())."]";

$headers .= "From: Automatic <an.e.mail@domain.net>\r\n"; 
$headers .= "To: SomeName <me@gmail.com>\r\n"; 

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;\r\n";
$headers .= " boundary=\"".$mime_boundary."\"";

$message .= "This is a multi-part message in MIME format.\r\n";
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "\r\n";
$message .= "Email content and what not: \r\n";
$message .= "This is the file you asked for! \r\n";
$message .= "--".$mime_boundary."\r\n";

$message .= "Content-Type: image/jpeg;\r\n";
$message .= " name=\"php.jpg\"\r\n";
$message .= "Content-Transfer-Encoding: quoted-printable\r\n";
$message .= "Content-Disposition: attachment;\r\n";
$message .= " filename=\"php.jpg\"\r\n";
$message .= "\r\n";
$message .= $content_encode;
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

$ok = mail("me@gmail.com", "file by email", $message, $headers);

В целом, скрипт работает. Я получаю электронное письмо в своем почтовом ящике, содержащее текст сообщения, указанный выше, и вложение в формате JPG. Переполнение стека не позволит мне опубликовать фотографию, потому что я новичок, но скриншот сообщения доступен здесь: http://i48.tinypic.com/xfuee0.png

Моя проблема возникает, когда я пытаюсь просмотреть вложение. При нажатии на вложение просто открывается новое окно браузера и отображается значок отсутствующего изображения.

Видите ли вы какие-либо проблемы с моим скриптом, которые могут помешать появлению изображения?

Любая информация была бы отличной. Спасибо!

Ответы [ 3 ]

3 голосов
/ 08 января 2010

Для всех, кто сталкивается с этим постом в будущем, проблема возникла из-за «Content-Transfer-Encoding», который должен был быть установлен в base64.

$message .= "Content-Transfer-Encoding: quoted-printable\r\n";

становится:

$message .= "Content-Transfer-Encoding: base64\r\n";
0 голосов
/ 08 января 2010

Три вещи выпрыгивают:

Во-первых, первое добавление к переменным $content и $message и $headers явно не устанавливает новое значение. То есть, почему бы не

$headers = "From: Automatic <an.e.mail@domain.net>\r\n";

вместо того, чтобы иметь:

$headers .= "From: Automatic <an.e.mail@domain.net>\r\n";

Это исключает возможность зависания некоторого остатка в переменных.

Во-вторых, вместо обычного \n есть \r\n, который должен работать в любой системе, даже в Windows. Хотя я сомневаюсь, что это проблема.

В-третьих, граница закрывающего пантомимы отличается от открытой.

0 голосов
/ 08 января 2010

Я вижу одну возможную причину, по которой вы не видите свое изображение. (Может быть больше (!).)

Попробуйте изменить:

$message .= "--".$mime_boundary."\r\n"; 

до

$message .= "--".$mime_boundary."--\r\n"; 

Для последней строки перед обращением к почте (т. Е. Граница «эпилога»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...