2010-07-19 22 views
32

Ich erstelle einige Inline-Bilder für eine E-Mail vom iPad gesendet. Sieht in allen Desktop-E-Mail-Clients gut aus, aber Gmail scheint das base64-Image nicht zu mögen und es erscheint als Text.Base64 Bilder zu Google Mail

Hat jemand Glück, Bilder mit Base64 und Google Mail einzubetten? Oder kennen Sie eine bessere Lösung für das Senden von HTML-E-Mails mit Bildern vom iPad?

+0

Ich denke, dass die Größe des Bildes Probleme verursacht. Meine Bilder sind 1024x768. –

+0

Funktioniert es mit kleineren Bildern? – ogur

+2

Ab 2016 scheint es, dass sie nicht mehr arbeiten; stattdessen wird die SRC entfernt und an ihrer Stelle das "alt" -Tag verwendet. – mix3d

Antwort

11

Die Links von Moin Zaman zeigen Testergebnisse, die veraltet sind (ab 2008). Nach meinen gründlichen Tests unterstützt Google Mail heute die Anzeige eingebetteter Bilder für beide Methoden.

Verwendung Base64-Kodierung Bild inline innerhalb <img src="...">

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

Verwendung Base64-codierte Bild als Anhang

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 
... 

Ihre eigenen Tests zu tun, können Sie E-Mail mit Inline eingebettete Bild senden Sie eine der folgenden Verwendung Techniken

eine E-Mail sendet eine der oben in Ihrem Google Mail-Konto, dann öffnen Sie die E-Mail in Google Mail-Web-Client (alle Browser verwenden, funktioniert) und verwenden Sie den Abwärtspfeil neben der Schaltfläche Antworten, um die Option Original anzeigen auszuwählen. Dies wird Ihnen zeigen, wie es empfangen wird.

Ich denke, Best Practice ist, das eingebettete Bild als Anhangsmethode zu verwenden.

Wenn ich in meinem Test mit dem Gmail Web Client 30 Bilder in einer einzelnen E-Mail in verschiedenen Größen sendete, konnten einige nicht erfolgreich den Bildcontainer, aber nicht das Bild anzeigen. Versuchen Sie in diesem Fall, die Seite neu zu laden.

In meinem Test (Windows 7) ...

  • Chrome (spätestens) benötigt ein paar Reloads erfolgreich/laden Zeige alle 30 Bilder
  • Opera (letzte) nicht erfolgreich alle 30 Bilder zeigen unabhängig von der Anzahl von Reloads
  • Firefox (neueste) konsequent alle
  • ohne Ausgabe 30 Bilder zeigten
  • Internet Explorer 9 (spätestens) konsequent zeigten alle 30 Bilder ohne Problem
  • Safari (spätestens) konsequent alle ohne Ausgabe 30 Bilder zeigten
Versuchen Sie
+2

Ich habe mit einer großen Anzahl von Bildern getestet, aber ich denke, wenn große Bilder verwendet werden, könnte dies auch dazu führen, dass sie nicht rechtzeitig laden/zeigen. Der Google Mail-Webclient reagiert ein wenig darauf, wie lange es dauert, bis diese eingebetteten Bilder geladen/angezeigt werden, und dies ist auch etwas vom Browser abhängig. Ihre Maschinen-/Netzwerkgeschwindigkeit kann ebenfalls dazu beitragen. In Bezug auf die Basisunterstützung unterstützt Gmail eingebettete Bilder. Es kann sich dabei nur um einen vorsätzlichen Time-to-Load-Schutz von Google gegen viele/große eingebettete Bilder handeln, die die Benutzerfreundlichkeit beeinträchtigen. – cusman

+5

Scheint, es nicht mehr zu unterstützen (Gmail) .. es entfernt nur die src Attribute und fügt die alt eine statt .. –

+20

Testen heute, Gmail unterstützt * nicht * Bilder mit 'Daten:' URLs. Es verwendet stattdessen nur den Text "alt". – jameshfisher

2

Stellen Sie sicher, dass Sie den Inhaltstyp festgelegt haben: multipart/mixed; , bound64 und Content-Transfer-Encoding: base64

+6

Können Sie ein Beispiel geben? –

+0

Ich denke, Sie könnten über E-Mail-Anhänge sprechen. –

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

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

[picker setMessageBody:emailBody isHTML:YES]; 

Wenn isHTMLYES, wird addAttachmentData Auto Änderung base64 string, in E-Mail html sehen Sie img.

Wenn isHTML NEIN ist, ist addAttachmentData Anhang.

+0

Das Problem liegt beim Empfänger, nicht die sendende Methode –

-1

Diese Freunde .. Ich bin sicher, dass diese

    $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); 

ein Bild als Anhang enthalten funktionieren würde, aber Sie haben durch die Verwendung verschiedener Content-Type-Header in alles in Header enthalten. und was auch immer Erscheinen im Körper, der der dritte Parameter in der Postfunktion sein könnte, wird als leere Zeichenkette übergeben.