Was ist der richtige Weg, um Bilder Phpmailer in eine HTML -E -Mail einzubetten?

StackOverflow https://stackoverflow.com/questions/1158889

  •  18-09-2019
  •  | 
  •  

Frage

Ich möchte einen Newsletter mit Phpmailer senden. Der Newsletter funktioniert, aber ich frage mich, ob es eine bessere Möglichkeit gibt, dies zu tun.

Was ich habe ist.

  1. HTML -Seite
  2. Bilder

Jetzt sieht mein Code wie folgt aus

$mail = new PHPMailer();

//Adding the body
$body = file_get_contents('template/index.htm');

$mail->Subject = "PHPMailer Test Subject via mail(), basic";

$mail->AltBody = "To view this message, please use an HTML compatible email viewer!";


$mail->SetFrom('xxxxxxx', 'xxxxxxxxxx');

$address = ".......@gmail.com";
$mail->AddAddress($address, "xxxxxxx");

$mail->AddEmbeddedImage("template/images/bullet_point.gif","1");
$mail->AddEmbeddedImage("template/images/template_1_01.gif","2");
$mail->AddEmbeddedImage("template/images/template_1_03.gif","3");


$mail->MsgHTML($body);

if(!$mail->Send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

Ich verwende File_Get_Contents, um die HTML -Seite zu erhalten, und addEmbeddedimage in die Bilder einbetten. Gibt es jetzt eine Möglichkeit, nur die HTML -Seite an PHPMailer zu übergeben, und dieser PHP -Mailer wird diese Bilder automatisch einbetten?

War es hilfreich?

Lösung

Ich denke nicht, dass das, was Sie versuchen, möglich (Automatisch hinzuzufügen erforderliche Bilder) mit Phpmailer "von Grund auf".

Vielleicht könnten Sie die HTML analysieren, um die Liste der Bilder zu erhalten, auf die sie verlinkt? Es gibt mindestens 2 Möglichkeiten:

  • Verwenden von Rexexen; Im Allgemeinen nicht der beste Weg, um Dinge zu tun, wenn Sie versuchen, Daten von HTML zu extrahieren - und Sie sind ^^
  • Ein anderer (wahrscheinlich) besserer Weg würde verwenden DOMDocument::loadHTML auf dem von Ihrer Datei geladenen HTML -Inhalt (der Ausgabe von file_get_contents) und arbeiten mit den Methoden von DOMDocument (und warum nicht, DOMXPath ?)

Um die Bilder zu bekommen, haben Sie vermutlich, dass Sie haben <img> Tags in Ihrer E-Mail mit, mit src Attribute; Das Ziel ist es, die Werte dieser zu finden ;-)

Sobald Sie die Liste der Bilderpfade haben, iterieren Sie über sie und rufen an $mail->AddEmbeddedImage auf jedem von ihnen.

Ich nehme an, das würde gut funktionieren (Ich habe es jedoch nicht versucht, aber ich verstehe nicht, warum es nicht würde).

Als Randnotiz ist die andere Möglichkeit, die Bilder für ein paar Tage/Wochen/Monate auf Ihrem Server auf Ihrem Server zu halten und sie nicht in die Post aufzunehmen. Es würde die Mails kleiner machen, was bedeutet: was bedeutet:

  • Weniger Bandwith, die auf Ihrer Seite ausgegeben werden (wenn Sie viele Mails senden, kann dies eine ziemliche Auswahl an Bandwith darstellen)
  • Weniger Bandwith, die für die Seite Ihrer Kunden ausgegeben werden - was auch für sie auch für sie ist ^^
  • Weniger Platz für ihre Festplatten verwendet ;-)

Und um sicherzustellen, dass die Bilder vor einigen Wochen / Monat auf dem Server nicht gelöscht / ersetzt werden, können Sie für jeden Newsletter ein neues Verzeichnis erstellen, das seine Bilder enthält - und ab und zu die älter X Tage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top