Письма с рельсов с изображением на AWS в скрепке, происходит очень странная вещь - PullRequest
1 голос
/ 16 февраля 2011

Я отправляю письма с рельсов, в письмах есть изображения. Эти изображения хранятся на AWS S3 через скрепку. Письмо создается в виде и отправляется динамически ...

Ты со мной так далеко? Отлично!

При получении электронных писем я бы сказал, что примерно у одного из десяти изображений есть слегка неправильный тег src = "", что означает, что изображения не отображаются.

Проблема с атрибутом src тега img заключается в том, что где-то в него случайно вставлен знак «+». Это примерно одно из десяти изображений, которые кстати не работают. Таким образом, атрибут src будет выглядеть примерно так в источнике письма ...

http://s3.ama+zonaws.com/bucketname/attachments/ect...
http://s3.amazonaws.com/bu+cketname/attachments/ect...
http://s3.amazonaws.com/bucketname/attachm+ents/ect...

Вы видите! Рандом + х. Что может быть причиной того, что это произошло со строкой src?

Ура!

Edit:

Это пример кода, который выводит изображение,

<%= image_tag xxxxx.image.url(:thumb), :style => "display:block; padding:0; line-height:0;" %>

Довольно стандартно, если вы спросите меня.

Также обратите внимание, что я проверил выходной html в консоли и у которого нет + в src.

... и я пытался отправить несколько разных почтовых провайдеров (gmail, hotmail, me.com и т. Д.) И клиентов, проблема возникает на всех них.

1 Ответ

3 голосов
/ 24 февраля 2011

Я сталкивался с чем-то похожим раньше при отправке электронной почты из приложения .NET.Я не могу подтвердить, что это та же проблема, поскольку я не знаю ничего о внутренней магии, происходящей здесь, но надеюсь, что это поможет.

SMTP имеет ограничение длины строки в сообщениипоток, поэтому, если ваше сообщение слишком длинное, SMTP-сервер может прервать линию.Я думаю ограничение составляет 1000 символов, но не все серверы могут правильно реализовывать протокол.

В некоторых случаях сервер также вставляет символ в конце строки, чаще всего ! илиblank.Если пустой символ вставляется в URL-адрес изображения, клиентское программное обеспечение, скорее всего, закодирует его в +.

Попробуйте вставить cr+lf разрывы строк после каждого изображения и посмотрите, улучшится ли проблема.

...