Forum Webscript.Ru

Программирование => PHP => Тема начата: Derbyt от 04 Февраля 2003, 11:14:33

Название: HTML - письмо с картинкой. Никак...
Отправлено: Derbyt от 04 Февраля 2003, 11:14:33
Прочитал все темы на форуме, которые касаются использования функции mail(), перепробовал много способов. Но нужного резултьтата не достиг. Не могу разобраться. Долго крепился. ПОМОГИТЕ!!!
Проблема в следующем: формирую хтмл-письмо и с помощью mail() отсылаю, но необходимо, чтобы в теле письма у получателя отображалась картинка. Прочитал описание MIME, но ясности не прибавило.
Использую код, который RomikChef, привел в одном из советов:

function sendmsg($to, $subject, $text, $from, $file, $type) {
$content = fread(fopen($file,"r"),filesize($file));
$content = chunk_split(base64_encode($content));
$uid = strtoupper(md5(uniqid(time())));
$name = basename($file);
$header = "From: $from\\nReply-To: $from\\n";
$header .= "MIME-Version: 1.0\\n";
$header .= "Content-Type: multipart/mixed; boundary=$uid\\n";
$header .= "--$uid\\n";
$header .= "Content-Type: text/html\\n";
$header .= "Content-Transfer-Encoding: 8bit\\n\\n";
$header .= "$text\\n";
$header .= "--$uid\\n";
$header .= "Content-Type: $type; name=\\"$name\\"\\n";
$header .= "Content-Transfer-Encoding: base64\\n";
$header .= "Content-Disposition: attachment";
$header .= "$content\\n";
$header .= "--$uid--";
@mail($to, $subject, "", $header);
return true;
}
 

Вызов этой функции:

while ($rowmail = mysql_fetch_array($allmailaddr))
{
$usermail = $rowmail["usermail"];
$subject = "Обзор последних новостей от ".date("d.m.Y")."";
$from = "derbyt@mail.ru";
$file = "http://site.ru/news/img/image.gif";
$type = "image/gif";
sendmsg($usermail, $subject, $htmlmail, $from, $file, $type);
}


В результате работы юзер все-таки получает письмо и даже файл рисунка в нем есть, но он в письме не отображается (в Бате показывает ошибку), а сам рисунок в Бате появляется еще одной вкладкой внизу письма. Размер файла рисунка 0, и соответственно ничего не отображается.
Пробовал использовать для этих целей Pear, но почта с сервера вообще не уходит (но сообщения об ошибках нет).
В рассылке, которая приходит в виде ХТМЛ с картинками, в коде ХТМЛ ссылки на картинки указаны типа:

Но что значит этот cid, нигде не нашел. Подскажите.
Название: HTML - письмо с картинкой. Никак...
Отправлено: Меняздесьдавнонет от 04 Февраля 2003, 13:34:53
А ты поищи по форуму по этому слову.
и будет тебе щасте
Название: HTML - письмо с картинкой. Никак...
Отправлено: Derbyt от 04 Февраля 2003, 13:44:11
RomikChef
Поиск ничего не дал, тем более я уже воспользовался таким же твоим советом, который ты давал ранее (ни на этом ни на других известных форумах я ничего не нашел).
Да и вообще хотелось бы знать, так ли мне поможет этот cid, может я вообще не в том направлении топчу. :-(((
Название: HTML - письмо с картинкой. Никак...
Отправлено: AliMamed от 04 Февраля 2003, 13:49:02
в хедер
Content-ID:advert/mdigital/030124megafon.jpg
Название: HTML - письмо с картинкой. Никак...
Отправлено: Derbyt от 04 Февраля 2003, 14:03:43
AliMamed
1. А в тексте ХТМЛ\'а что писать в теге .
2. Что за путь идет после advert/ - относительный?
3. Если я так напишу картинку приаттачивать обычным образом (что-то навроде того, как я описал выше).
Название: HTML - письмо с картинкой. Никак...
Отправлено: AliMamed от 04 Февраля 2003, 14:25:37
1.тоже
2.безраницы это айди
3.таккак написано вверху. Content-ID соответственно там, где содержимое файла
Название: HTML - письмо с картинкой. Никак...
Отправлено: Derbyt от 04 Февраля 2003, 15:07:15
Попробовал - не получилось.
Пишу:
1. В вызове процедуры

$usermail = "test@test.ru";
$subject = "Обзор последних новостей";
$from = "admin@test.ru";
$file = "http://test.ru/news/img/image01.gif";
$type = "image/gif";
sendmsg($usermail, $subject, $htmlmail, $from, $file, $type);

В самой процедуре дописал:

function sendmsg($to, $subject, $text, $from, $file, $type) {
$content = fread(fopen($file,"r"),filesize($file));
$content = chunk_split(base64_encode($content));
$uid = strtoupper(md5(uniqid(time())));
$name = basename($file);
$header = "From: $from\\nReply-To: $from\\n";
$header .= "MIME-Version: 1.0\\n";
$header .= "Content-Type: multipart/mixed; boundary=$uid\\n";
$header .= "--$uid\\n";
$header .= "Content-Type: text/html\\n";
$header .= "Content-Transfer-Encoding: 8bit\\n\\n";
$header.= "$text\\n";
$header .= "--$uid\\n";
$header .= "Content-Type: $type; name=\\"$name\\"\\n";
$header .= "Content-Transfer-Encoding: base64\\n";
$header .= "Content-Disposition: attachment";
$header .= "Content-ID:$file"; //Вот здесь не знаю,то ли я пишу
$header .= "$content\\n";
$header .= "--$uid--";
@mail($to, $subject, "", $header);
return true;
}


В теле ХТМЛ письма:


Правильно ли все вышенаписанное.
Конечно поиском по форуму я пересмотрел все вопросы, связанные с отправкой почты, часто встречаются повторяющиеся. Вывод - тема наболевшая у многих. Может быть стоит тов. Модераторам поместить в FAQ расширенный ответ на тему отправки почты различными способами, чтобы такие ламеры от ПХП, типа меня, вдумчивую общественность своими вопросами не доставали.
Название: HTML - письмо с картинкой. Никак...
Отправлено: Derbyt от 04 Февраля 2003, 15:21:29
Последняя строка не верная (тело письма). На самом деле она выглядит так:
Название: HTML - письмо с картинкой. Никак...
Отправлено: Меняздесьдавнонет от 04 Февраля 2003, 15:40:11
Derbyt
если давать прямые ссылки в нет, то никакой cid не нужен.
просто пишешь адрес, и все.

На этом форуме, может быть, и нет.
Но на phpclub-e я сам лично увидел в первый раз код, который показывает картинки, приаттаченые к письму.
За тебя искать мне, извини - лень.

cid - это то, что тебе надо. AliMamed пишет какой-то бред.
контент ид пишется в соответствующем парте мультипарта, цид - в ссылке.
В общем, найди код - все станет ясно.
Название: HTML - письмо с картинкой. Никак...
Отправлено: Derbyt от 04 Февраля 2003, 16:13:20
RomikChef
Код-то я нашел (может правда не тот который видел ты), но не совсе догоняю что к чему.
Вот например:

1)$message .= "\\n";
2)$message .= "\\n";
3)$message .= "blah blah -- html version of the message\\n";
4)$message .= "\\n";
5)$message .= "\\n";
6)$message .= "\\n";

7)$message .= "------=MIME_BOUNDRY_main_message\\n";
8)$message .= "Content-Type: image/gif; \\n name=\\"some_picture.gif\\"\\n";
9)$message .= "Content-Transfer-Encoding: base64\\n";
10)$message .= "Content-ID: \\n";
11)$message .= "\\n";

Не ясно, что идет в cid в строке 4) и 10) (имя файла или путь).
Нужно ли втыкать где нибуд считывание и перекодировку файла рисунка (fread(fopen($file,"r"),filesize($file)) и base64_encode).
Название: HTML - письмо с картинкой. Никак...
Отправлено: Меняздесьдавнонет от 04 Февраля 2003, 17:33:35
Не понял?!
Ты собрался отправлять письмом картинку, но спрашиваешь меня - надо ли ее вкладывать в письмо??

(самым саркастическим тоном, какой у меня есть) НЕТ, НЕ НАДО!
Название: HTML - письмо с картинкой. Никак...
Отправлено: Derbyt от 04 Февраля 2003, 17:38:46
RomikChef
Самым дружелюбным и радостным тоном отвечаю СПАСИБО (хотя ничего еще не заработало).
Название: HTML - письмо с картинкой. Никак...
Отправлено: AliMamed от 04 Февраля 2003, 18:29:54
RomikChef сам ты бред
Название: HTML - письмо с картинкой. Никак...
Отправлено: Derbyt от 04 Февраля 2003, 18:31:58
Нифига... Так я и не догнал с этими cid\'ами. Последняя надежа найти доку. Если кто может чем помочь, кинте ссылочку. Пойду за мыльцем и веревочкой, может поможет а?
Название: HTML - письмо с картинкой. Никак...
Отправлено: AliMamed от 04 Февраля 2003, 18:41:48
http://www.rfc-editor.org/rfc/rfc2557.txt
Название: HTML - письмо с картинкой. Никак...
Отправлено: NeoNox от 04 Февраля 2003, 18:48:38
В помощь.
Полистайте еще вот этот: http://egor.spb.ru/doc/mail/rfc1521.html
Название: Так почему же размер картинки =0?
Отправлено: slider2001 от 20 Октября 2003, 15:35:04
Так почему же размер картинки =0?
Я долго искал ответ на этот вопрос, но так и не нашел как это исправить, не мог бы кто-ниюудь мне подсказать?
Название: HTML - письмо с картинкой. Никак...
Отправлено: Макс от 20 Октября 2003, 15:58:01
slider2001
а ты картинку к письму присоединил ?
Название: HTML - письмо с картинкой. Никак...
Отправлено: slider2001 от 20 Октября 2003, 16:40:41
Да,
я делал как в этом примере, что в начале темы, только первые 3 строчки у меня header:
$header = "From: $backemail\\nReply-To: $backemail\\n";
$header .= "MIME-Version: 1.0\\n";
$header .= "Content-Type: multipart/mixed; boundary=$uid\\n";
а остальной текст $body,
mail($a,$b,$body,$header);
Название: HTML - письмо с картинкой. Никак...
Отправлено: slider2001 от 20 Октября 2003, 16:47:53
Причем размер картинки выдается правильно:

$filename="path";
echo filesize($filename);
Название: HTML - письмо с картинкой. Никак...
Отправлено: Макс от 20 Октября 2003, 16:49:40
посмотри MIME-код письма. Там в письме есть base64-код картинки
Название: HTML - письмо с картинкой. Никак...
Отправлено: slider2001 от 20 Октября 2003, 16:55:07
Content-Type: image/jpeg; name=""
Content-Disposition: attachment
; filename=""/набор букв и цифр

?
Название: HTML - письмо с картинкой. Никак...
Отправлено: slider2001 от 20 Октября 2003, 17:12:34
Вернее в кавычках есть название файла, а самого файла ниже нет
Название: HTML - письмо с картинкой. Никак...
Отправлено: slider2001 от 20 Октября 2003, 17:15:40
хотя может это и есть описание файла, так как букв и цифр на 2 строчки, а файл размером 2500 байт.
Подскажите, пожалуйста, кто знает.
Но файл все равно приходит размером 0 байт.
Название: HTML - письмо с картинкой. Никак...
Отправлено: Меняздесьдавнонет от 20 Октября 2003, 19:37:47
А вот в книжечке, на которую периодически появляется ссылка наверху страницы - "Профессиональное PHP программирование, 2-е издание", эта тема разобрана просто по косточкам.
Я сегодня листал.
То есть, с азов - начиная с телнет сессии с мейл-сервером и заканчивая МИМЕ форматом.
Просто читал и радовался.
Название: HTML - письмо с картинкой. Никак...
Отправлено: Макс от 20 Октября 2003, 19:41:20
slider2001
Цитировать
Вернее в кавычках есть название файла, а самого файла ниже нет
если файл не присоединяется значит либо проблемі с правами доступа к файлу, либо ты неправильно его читаешь или вставляешь в письмо.

Покажи свой код (только тот участок где ты читаешь файл и вставляешь в письмо)
Название: HTML - письмо с картинкой. Никак...
Отправлено: slider2001 от 21 Октября 2003, 10:11:42
Что-то заработало, не хватало лишних "\\r\\n".
Но размер файла почему-то приходит гораздо меньшим.

$attachment="test.jpg";
echo "Размер файла: ".filesize($attachment)."
";
$fn = fopen($attachment, "r");
$content = fread($fn, filesize($attachment));
echo "Размер прочтенного: ".strlen($content)."
";

Размер файла = 2409
Размер прочтенного = 109

Ведь должно быть еще больше где же тут ошибка?
Название: HTML - письмо с картинкой. Никак...
Отправлено: slider2001 от 21 Октября 2003, 10:27:32
Спасибо, уже ответили
Название: HTML - письмо с картинкой. Никак...
Отправлено: amigo от 24 Октября 2003, 09:14:19
Derbyt
Есть еще очень хороший класс, называется PHPMailer (ищется Гуглом). Скачай и не загоняйся. В принципе, можно и в исходниках покопаться.