2015-07-03 3 views
5

Ich benutze ActionMailer, um E-Mails zu senden, und diese E-Mails enthalten Bilder. Die Bilder, die ich verwende, sind <%= image_tag('email-logo.png') %> und config.action_controller.asset_host in Staging/Produktion ist korrekt eingestellt.ActionMailer E-Mail-Bilder in einigen Clients beschädigt

Diese Bilder erscheinen in Outlook gut (ich habe es auch in ein paar temporären E-Mail-Diensten versucht, und sie funktionieren auch dort), erscheinen aber in Gmail, Apple Mail (Desktop + iOS) und Mailbox-App kaputt.

Die Codierung für die HTML-Version der E-Mail ist quoted-printable, ist das korrekt?

Wenn ich die rohe E-Mail in Google Mail, das Markup für das Bild inspizieren erscheint wie:

<img alt=3D"Site Logo" class=3D"logo" src=3D"//staging.mysite.come/ass= 
ets/email-logo-98e7cf6a48a4f2186ab9de2dcdfaa4bf0.png" style=3D"width: 30= 
px; display: inline; vertical-align: middle;" /> 

Wenn ich die = und laden Sie die URL in meinem Browser entfernen es in Ordnung erscheint. Könnte die = es brechen? Könnte es das Fehlen eines Protokolls in der Bild-URL sein?

Vielen Dank für jede Hilfe im Voraus!

Antwort

1

Es ist nichts falsch mit der =. Es ist ein weichen Zeilenumbruch in quoted-printable Codierung verwendet, um mit der 76 Zeichen Zeilenlänge zu entsprechen, und es wird entfernt und die beiden Zeilen verbunden, wenn der Text dekodiert wird. Weitere Informationen finden Sie unter wikipedia page on Quoted-printable.

Ich vermute, dass Google Mail das Image nicht vorab abrufen kann. Google Mail versucht, das Image vorab abzurufen und dann von seinen sicheren Proxyservern aus zuzustellen. Weitere Informationen hierzu finden Sie unter this official post. Um dies zu tun, muss das Bild eine öffentlich zugängliche URL haben. Ähnliches könnte bei den anderen Kunden passieren.

So zwei Dinge könnten hier passiert werden:

  • Gmail (und die anderen Clients) ein Protokoll relativ (oder "schemaless") url (sie könnten versuchen, https nicht unterstützt http dann, aber ich don‘ t wissen, wenn sie das tun). Um sicher zu sein, würde ich eine vollständige URL verwenden. Das Bild ist nicht öffentlich zugänglich, auch wenn es mit http oder https versucht wurde. Sie verwenden ein Staging-Env, vielleicht ist es mit http Basic Auth geschützt? Auch die .come als TLD in staging.mysite.come ist seltsam, aber ich nehme an, es war nur ein Tippfehler ...
+0

Fantastisch! Es endete damit, dass es kein Protokoll gab. Auch ja, 'komm 'war ein Tippfehler;) Danke! –

+0

Gut zu wissen, und froh zu helfen! – nberger

+0

Gute Erklärung, was das alles bedeutet. –