Неизведанный способ вставки inline картинок в письма?

f190d226.png

Получил на днях рассылку на gmail и увидел картинки сразу, без всяких там «Показать картинки» и зачем-то я посмотрел сурс. Думал, что там обычный аттач с Content-Disposition: inline и ссылки на него в теле письма. Но увидел нечто иное. Приаттаченные картинки были оформлены так:


Copy Source | Copy HTML


Content-Type: image/jpeg; name=image.jpg

Content-Transfer-Encoding: base64

Content-Disposition: attachment; filename=image.jpg

Content-Location: example.com/image.jpg

 



А в теле письма были просто теги <img src="example.com/image.jpg">


Попробовал воспроизвести с помощью SwiftMailer'а:

Copy Source | Copy HTML

$transport = Swift_SmtpTransport::newInstance();
$transport->setUsername('login');
$transport->setPassword('password');

 
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance();
$message->setSubject('Hello man!');
$message->setFrom(array('r2d2@example.com'=>'R2D2'));
$message->setTo('c3po@example.com', 'C3PO');

 
$body='<img src="example.com/image.jpg">';
$message->setBody($body, 'text/html');

 
$attach=Swift_Attachment::fromPath('/home/example/htdocs/image.jpg');
// к обычному аттачу добавляем заголовок Content-Location
$attach->getHeaders()->addTextHeader('Content-Location', 'example.com/image.jpg');

 
$message->attach($attach);
$mailer->send($message);

 



Это работает, картинки грузятся в письмо сразу, с сервера не запрашиваются, как аттачи не показываются. Проверял в gmail и outlook 2007. Перерыл все rfc, что нашел — нигде не увидел упоминаний о подобном. По rfc для вставки inline картинки нужно использовать Content-Disposition: inline и Content-ID


Вопрос: почему это работает?

Кстати, gmail всегда показывал встроенные картинки сразу?
  • Вопрос задан
  • 7296 просмотров
Пригласить эксперта
Ответы на вопрос 2
MastaEx
@MastaEx Автор вопроса
Но это же rfc по HTTP, не понимаю как он связан с письмами?
Да и в HTTP, из прочитанного, не могу понять как этот заголовок используется. Вы можете привести пример?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы