2009-02-11 7 views
5

Gibt es eine Möglichkeit, ein Bild an eine HTML-formatierte E-Mail-Nachricht anzuhängen, die in PHP erstellt wurde?PHP Ein Bild an eine E-Mail anhängen

Wir müssen sicherstellen, dass ein Firmenlogo auf E-Mails an Kunden gesendet wird, die möglicherweise keinen Zugang zum Internet haben, während sie ihre E-Mails lesen (sie werden es natürlich haben, um die Dateien herunterzuladen).

Antwort

11

Probieren Sie die PEAR Mail_Mime Paket, die embed images for you.

Sie müssen die addHTMLImage() Methode verwenden und eine Inhalts-ID (CID) übergeben, die eine eindeutige Textfolge ist, die Sie auch im src-Attribut Ihres imgs als cid: URL verwenden. Zum Beispiel:

include('Mail.php'); 
include "Mail/mime.php"; 


$crlf = "\r\n"; 
$hdrs = array( 
     'From' => '[email protected]', 
     'Subject' => 'Mail_mime test message' 
     ); 

$mime = new Mail_mime($crlf); 

//attach our image with a unique content id 
$cid="mycidstring"; 
$mime->addHTMLImage("/path/to/myimage.gif", "image/gif", "", true, $cid); 

//now we can use the content id in our message 
$html = '<html><body><img src="cid:'.$cid.'"></body></html>'; 
$text = 'Plain text version of email'; 

$mime->setTXTBody($text); 
$mime->setHTMLBody($html); 

$body = $mime->get(); 
$hdrs = $mime->headers($hdrs); 

$mail =& Mail::factory('mail'); 
$mail->send('[email protected]', $hdrs, $body); 
+1

Verdammt, waren Sie 20 Sekunden schneller ;-) –

+0

Ich erhalte zweimal den Fehler 'Hinweis: Nicht definierte Eigenschaft: Mail_mime :: $ _html_images in ... '. In dieser Zeile deklarieren Sie die Variable $ cid. Es sendet die E-Mail, aber es zeigt das Bild nicht an. Können Sie Ihre Antwort aktualisieren? –

+0

Diese Antwort ist * 7 Jahre alt! Wenn Sie sich die Quelle für Mail_Mime ansehen, sehen Sie, dass das '$ _html_images'-Mitglied, auf das ich zugreife, in' $ html_images' umbenannt wird und https://github.com/pear/Mail_Mime/blob/1.10.0/Mail/ geschützt ist. mime.php # L111 Wäre nicht schwer, eine neue Klasse von Mail_mime abzuleiten und eine Methode hinzuzufügen, um Ihnen diesen 'cid' Wert zu geben. –

2

Es ist wahrscheinlich am einfachsten eine Bibliothek zu verwenden, die mit E-Mail-Anhängen umgehen können. Zum Beispiel, PEAR's Mail_Mime.

0

Rollen Sie Ihre eigene oder verwenden Sie eine vorgefertigte Klasse ? Ich empfehle PHP Mailer [0] selbst, und es gibt auch PEAR :: Mail_Mime [1] unter anderem, dass Google würde Ihnen gerne helfen finden. Ich habe mit PHP Mailer Nachrichten senden mit eingebetteten Bildern [2] jahrelang ohne Probleme, tragen allerdings daran, dass jedes Bild erhöht die Bandbreite Gewicht des E-Mail enorm, so Regel sollte es nicht für verwendet werden alles in großen Mengen. Und Echo Bill, do nutzen Sie auch die Nur-Text-Alternative.

[0] http://phpmailer.sourceforge.net/

[1] http://pear.php.net/manual/en/package.mail.mail-mime.php

[2] http://phpmailer.sourceforge.net/docs/PHPMailer/PHPMailer.html#AddEmbeddedImage

genommen von http://lists.evolt.org/archive/Week-of-Mon-20060612/183029.html

1

Mail_Mime Paket der PEAR ist, was Sie hier sind.

Sobald Sie Ihre Nachricht eingerichtet haben, Hinzufügen einer Anlage ist so einfach wie:

$mime = new Mail_mime("\n"); 

$mime->setTXTBody($msg_text); 
$mime->setHTMLbody($msg_html); 

// Add gif as attachment to mail 
$mime->addAttachment("/path/to/image/smile.gif", "image/gif"); 

$body = $mime->get(); 
$headers = $mime->headers($headers); 
$mail->send("[email protected]", $headers, $body); 

Wenn Sie suchen für Ihr Logo in einem bestimmten Ort in der E-Mail angezeigt werden - und nicht nur als eine Anlage - können Sie folgendes tun:

// In your message html: 
<img src='logo.gif' alt='Our logo' /> 

// PHP: 
$mime->addHTMLImage('/path/to/image/logo.gif'); 

Dieser Ansatz gemischt Ergebnisse je haben kann Ihre Benutzer-Mail-Client auf, so, bevor es aus try testen Format auf Dummy-gmail, yahoo und hotmail-Konten zu senden.

0

Es gibt mehr als genug Antworten hier, die helfen sollten, Ihr spezifisches Problem zu beheben, aber ich dachte nur, es könnte wert sein, darauf hinzuweisen, dass Sie möglicherweise ein größeres Problem haben, das Sie nicht berücksichtigt haben.

Speziell - das Schreiben von E-Mails, die über PHP gesendet werden, ist voller potenzieller Fehler und sollte nur dann durchgeführt werden, wenn Sie wirklich wissen, was schief gehen kann.

Wenn Sie E-Mails ziemlich intensiv verschicken möchten, würde ich Ihnen dringend empfehlen, entweder einen dedizierten E-Mail-Marketing-Client zu verwenden oder eines der vielen E-Mail-Marketing-APIs zu implementieren, die es für Sie versenden. (mailchimp ist anscheinend ein anständiger).