Получил на днях рассылку на 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 всегда показывал встроенные картинки сразу?