2015-07-03 35 views
5

Uso ActionMailer per inviare e-mail e queste e-mail includono immagini. Per includere le immagini che sto usando <%= image_tag('email-logo.png') %> e config.action_controller.asset_host in staging/produzione è impostato correttamente.Immagini email di ActionMailer interrotte in alcuni client

Queste immagini appaiono corrette in Outlook (l'ho provato anche in alcuni servizi di posta elettronica temporanea, e funzionano anche lì), ma appaiono interrotte in Gmail, Apple Mail (desktop + iOS) e app Mailbox.

La codifica per la versione HTML dell'e-mail è quoted-printable, è corretta?

Quando ho ispezionare le e-mail prima in Gmail, il markup per l'immagine appare come:

<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;" /> 

Quando rimuovo il = e caricare l'URL nel browser appare bene. Potrebbe lo = romperlo? Potrebbe essere la mancanza di protocollo nell'URL dell'immagine?

Grazie per qualsiasi aiuto in anticipo!

risposta

1

Non c'è niente di sbagliato con lo =. È una nella riga quoted-printable nella codifica quoted-printable utilizzata per rispettare la lunghezza della linea di 76 caratteri e viene rimossa e le due linee vengono unite quando il testo viene decodificato. Vedi lo wikipedia page on Quoted-printable per maggiori informazioni.

Sospetto che Gmail non riesca a precaricare l'immagine. Gmail prova a precaricare l'immagine e poi a servirla dai loro server proxy sicuri. Vedi this official post per maggiori informazioni a riguardo. Per fare ciò, l'immagine deve avere un URL accessibile pubblicamente. Una cosa simile potrebbe accadere con gli altri clienti.

Quindi due cose potrebbe accadere qui:

  • Gmail (e gli altri client) non supporta un protocollo relativo (o "schemaless") URL (che potrebbe tentare http poi https, ma io don' so se lo fanno). Per sicurezza userei un url completo.
  • L'immagine non è accessibile al pubblico, anche se provata con http o https. Stai utilizzando un env di staging, forse è protetto con http basic auth? Anche lo .come come TLD in staging.mysite.come è strano, ma presumo fosse solo un refuso ...
+0

Fantastico! Finì per essere la mancanza di protocollo. Anche sì, 'come' era un errore di battitura;) Grazie! –

+0

Buono a sapersi, e felice di essere d'aiuto! – nberger

+0

Buona spiegazione che cosa significa tutto questo =. –