Ich möchte ein Bild an eine E-Mail anhängen und es auch inline mit einigen anderen von PHP generierten Inhalten anzeigen. Das Problem ist, dass ich nicht die geringste Ahnung habe, wie man ein Dateianhangsarray, das von wp_mail zum Anhängen verwendet wird, inline verwendet.
Meine Lösung bestand darin, die Bilder in base64 zu codieren und sie wie folgt in den HTML-Code einzufügen:
Das Problem ist jedoch, dass Gmail / Outlook die src-Daten aus dem Bild entfernt. So landet es als
<img alt="The Alt" />
Irgendwelche Hinweise, was zu ändern ist (Header, um mit base64 zu arbeiten) oder wie man Anhänge verwendet, um sie inline einzubetten?
Konstantin
wp_mail nutzt die PHPMailer Klasse. Diese Klasse verfügt über alle Funktionen, die für Inline-Anhänge erforderlich sind. Um das phpmailer-Objekt zu ändern, bevor wp_mail() die E-Mail sendet, können Sie den Filter verwenden phpmailer_init.
$body = '
Hello John,
checkout my new cool picture.
<img src="https://stackoverflow.com/questions/15646187/cid:my-cool-picture-uid" width="300" height="400">
Thanks, hope you like it ;)';
Das war ein Beispiel dafür, wie Sie das Bild in Ihren E-Mail-Text einfügen.
$file="/path/to/file.jpg"; //phpmailer will load this file
$uid = 'my-cool-picture-uid'; //will map it to this UID
$name="file.jpg"; //this will be the file name for the attachment
global $phpmailer;
add_action( 'phpmailer_init', function(&$phpmailer)use($file,$uid,$name){
$phpmailer->SMTPKeepAlive = true;
$phpmailer->AddEmbeddedImage($file, $uid, $name);
});
//now just call wp_mail()
wp_mail('[email protected]','Hi John',$body);
Das ist alles.
Denken Sie an das Semikolon am Ende der Zeile nach „file.jpg“.
– janlindso
25. Oktober 2014 um 22:26 Uhr
Zu meinem
Wenn Sie einen unerwarteten T_FUNCTION-Fehler erhalten, liegt dies an der PHP-Version < 5.3. Erstellen Sie in diesem Fall eine Funktion, um dies auf traditionellere Weise zu tun:
function attachInlineImage() {
global $phpmailer;
$file="/path/to/file.jpg"; //phpmailer will load this file
$uid = 'my-cool-picture-uid'; //will map it to this UID
$name="file.jpg"; //this will be the file name for the attachment
if (is_file($file)) {
$phpmailer->AddEmbeddedImage($file, $uid, $name);
}
}
add_action('phpmailer_init','attachInlineImage');
Ich brauchte das etwas besser, weil ich mehrere Mails in einem Schritt versende und nicht alle Mails die gleichen eingebetteten Bilder haben sollten. Also verwende ich diese Lösung von Constantin, aber mit meinen Modifikationen 🙂