2010-07-19 18 views
32

Sto generando alcune immagini in linea per un'email inviata dall'iPad. Sembra ottimo in tutti i client di posta elettronica desktop, ma a gmail non sembra piacere l'immagine base64 e si presenta come testo.Base64 images to gmail

Chiunque ha qualche fortuna nell'incorporare le immagini con base64 e gmail? Oppure conosci una soluzione migliore per l'invio di email HTML con immagini dall'iPad?

+0

Penso che la dimensione dell'immagine stia causando problemi. Le mie immagini sono 1024x768. –

+0

Funziona con immagini più piccole? – ogur

+2

A partire dal 2016 sembra che non funzionino più; invece l'SRC è spogliato e il tag 'alt' usato al suo posto. – mix3d

risposta

11

I link di Moin Zaman mostrano risultati di test non aggiornati (dal 2008). A partire dai miei test approfonditi oggi Gmail supporta la visualizzazione di immagini incorporate per entrambi i metodi.

Usa in linea immagine codifica Base64 all'interno <img src="...">

<html><body><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA9QAAADmCAIAAAC77FroAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAO..."</body></html> 

Utilizzare Base64 immagine codificata come allegato

Message-ID: <[email protected]> 
Accept-Language: en-US 
Content-Language: en-US 
X-MS-Has-Attach: yes 
X-MS-TNEF-Correlator: 
x-originating-ip: [xxx.xxx.xxx.xxx] 

Content-Type: multipart/related; 
    boundary="_038_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_"; 
    type="multipart/alternative" 
MIME-Version: 1.0 
Return-Path: [email protected] 
X-OriginatorOrg: example.com 

--_038_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_ 
Content-Type: multipart/alternative; 
    boundary="_000_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_" 

...skipping Content-Type: text/plain which would be here for this example... 

--_000_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_ 
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: quoted-printable 

<html><body><img border=3D"0" width=3D"980" height=3D"230" id=3D"Picture_x0020_1" src==3D"cid:[email protected]"></body></html> 

--_000_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_-- 

--_038_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_ 
Content-Type: image/png; name="image001.png" 
Content-Description: image001.png 
Content-Disposition: inline; filename="image001.png"; size=32756; 
    creation-date="Mon, 08 Oct 2012 15:27:07 GMT"; 
    modification-date="Mon, 08 Oct 2012 15:27:07 GMT"; 
Content-ID: <[email protected]> 
Content-Transfer-Encoding: base64 

iVBORw0KGgoAAAANSUhEUgAAA9QAAADmCAIAAAC77FroAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAO 
xAAADsQBlSsOGwAAf5lJREFUeF7tvQlgVdW18L+ZR20mpsSLCYlBQKwgwRCMr9TAqzg0CAl98Y9a 
ikBfHxL1A/r0tUr77Feg1mDav4LUijxTk8hLRIstQ2mJhEiAWAEpNCGRa8KUSQXCzLf2cOZz7j33 
5s5Zx6j3nruHtX97n33WWWfttbtdv36d4IEEkAASQAJIAAkgASSABJCA/wl0938VWAMSQAJIAAkg 
ASSABJAAEkAClAAq3zgOkAASQAJIAAkgASSABJBAgAig8h0g0FgNEkACSAAJIAEkgASQABJA5RvH 
... 

di fare il proprio test, è possibile inviare e-mail in linea immagine incorporata utilizzando uno dei seguenti con tecniche

Invia una e-mail utilizzando uno di quanto sopra al tuo account Gmail, quindi aprire la mail in Gmail Web Client (tutti i browser che funziona) e utilizzare la freccia giù accanto al pulsante Rispondi per scegliere l'opzione Mostra originale. Questo ti mostrerà come viene ricevuto.

Penso che la pratica migliore sia utilizzare l'immagine incorporata come metodo di collegamento.

Durante i miei test con Gmail Web Client, se ho inviato 30 immagini in una singola e-mail di dimensioni diverse, alcune non sarebbero state caricate correttamente mostrando il contenitore dell'immagine ma non l'immagine. Se ciò accade, prova a ricaricare la pagina.

Nel mio test (Windows 7) ...

  • Chrome (ultimo) aveva bisogno di un paio di ricarica per caricare/mostrare tutte le 30 immagini con successo
  • Opera (più recente) non mostrerebbe con successo tutte le 30 immagini indipendentemente dal numero di ricariche
  • Firefox (l'ultima) costantemente ha mostrato tutte le 30 immagini senza edizione
  • Internet Explorer 9 (ultima) costantemente ha mostrato tutte le 30 immagini senza edizione
  • Safari (l'ultima) in modo coerente ha mostrato tutte le 30 immagini senza edizione
+2

Ho provato con un numero elevato di immagini, ma penso che se vengono utilizzate immagini di grandi dimensioni, ciò potrebbe anche far sì che non vengano caricate/visualizzate in tempo. Gmail Web Client è un po 'sensibile a quanto tempo occorrerebbe per caricare e mostrare le immagini incorporate e anche questo dipende in qualche modo dal browser. Anche la velocità della tua macchina/rete potrebbe essere un fattore determinante. Ma in termini di supporto di base, Gmail supporta le immagini incorporate. Potrebbe trattarsi di alcune protezioni intenzionali del tempo di caricamento da parte di Google contro molte/grandi immagini incorporate, per non danneggiare l'esperienza dell'utente. – cusman

+5

Sembra non supportarlo più (Gmail) .. ha appena rimosso gli attributi src e aggiunge invece quello alt. –

+20

Testing oggi, Gmail * non * supporta le immagini usando gli URL 'data:'. Usa solo il testo 'alt' invece. – jameshfisher

2

Assicurati di impostare Content-Type: multipart/mixed; , boundary e Content-Transfer-Encoding: base64

+6

Puoi fare un esempio? –

+0

Penso che potresti parlare di allegati email. –

-9
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 

[picker addAttachmentData:UIImageJPEGRepresentation(_tempImage,1) mimeType:mimeType fileName:filename]; 

[picker setMessageBody:emailBody isHTML:YES]; 

Se isHTML è YES, addAttachmentData cambierà automaticamente a stringa Base64, in email HTML può vedere voi IMG.

Se isHTML è NO, addAttachmentData è allegato.

+0

Il problema si trova con il destinatario, non con il metodo di invio –

-1

provare questo Amici .. Sono sicuro che questo avrebbe funzionato per includere un'immagine come allegato

    $output_hex_string_img = $image; 
        $output_bin_string_img = base64_decode($output_hex_string_img); 
        //echo base64_encode($output_bin_string_img); 
        $XXX = base64_encode($output_bin_string_img); 

        $from_name = "Senders Name"; 
        $from_mail = "[email protected]"; 
        $replyto = "[email protected]"; 
        $subject = "Device Missing Notification"; 
       $message = "Device Missing notification has been activated on your device. Please change this setting when you find your smartphone back. Best Of Luck!!\r\r "; 



        $mailto = '[email protected]'; 



         $file = $XXX; 
         $filename = "Print_shot.png"; 
         $uid = md5(uniqid(time())); 
         $name = basename($file); 
         $header = "From: ".$from_name." <".$from_mail.">\r\n"; 
         $header .= "Reply-To: ".$replyto."\r\n"; 
         $header .= "MIME-Version: 1.0\r\n"; 
         $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; 
         $header .= "This is a multi-part message in MIME format.\r\n"; 
         $header .= "--".$uid."\r\n"; 
         $header .= "Content-type:text/html; charset=iso-8859-1\r\n"; 
         $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
         $header .= $message."\r\n\r\n"; 
         $header .= "--".$uid."\r\n"; 
         $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here 
         $header .= "Content-Transfer-Encoding: base64\r\n"; 
         $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; 
         $header .= $file."\r\n\r\n"; 
         $header .= "--".$uid."--"; 
         mail($mailto, $subject, "", $header); 

Ma si deve includere tutto dentro le intestazioni utilizzando diversi Content-Type nelle intestazioni. e qualunque cosa Appear in the Body che potrebbe essere il terzo parametro nella funzione mail verrà passato come una stringa vuota.