Wenn man mit PHP eine E-Mail versenden möchte kann man natürlich auf die interne mail-Funktion zurückgreifen. Diese Funktion ist allerdings sehr grundlegend und häufig fehlen die nötigen Voraussetzungen auf dem System.
Einen Ausweg bieten PHP-Frameworks wie z.B. Zend, CodeIgniter oder Symfony, die eine bequeme API anbieten.
WordPress ist zwar kein allgemeines PHP-Framework wie die oben genannten Beispiele, aber es enthält eine Fülle von Funktionen, die bei der Programmierung von Plugins von Hilfe sein können. So gibt es natürlich auch eine Funktion, die das Versenden von E-Mails ermöglicht.
Diese Funktion trägt den Namen wp_mail()
und ist in der Datei .../wp-includes/pluggable.php
definiert.
Die Funktion wp_mail
Im Codex ist die formale Definition von wp_mail()
beschrieben:
< ?php wp_mail( $to, $subject, $message, $headers, $attachments ); ?>
Die Parameter haben dabei folgende Bedeutung:
- $to
- Empfänger der Mail. Es kann mehr als ein Empfänger angegeben werden, indem man ein Array oder ein Liste mit komma-getrennten Namen angibt.
- Ein String, der das Betreff der Mail enthält.
- Dieser String enthält den Inhalt der Mail.
- Header, die mit der Mail mitversand werden sollen (optional).
$subject
$message
$headers
$attachments
Anhänge, die mit der Mail versand werden sollen (optional).
Hello world!
Die einfachste Möglichkeit eine Mail zu versenden sieht dementsprechend folgendermaßen aus:
wp_mail('ich@beispiel.net', 'Hallo Welt', 'Hört mich jemand?');
Eine Mail per WordPress-API ist also ganz einfach. Auf den ersten Blick fällt allerdings auf, dass es keinen Parameter für die Mailadresse des Absenders gibt. Auf den zweiten Blick, dass kein SMTP-Host für den Versand der Mail angegeben werden kann.
Als Absendername wird “WordPress” und Absenderadresse wordpress@servername
als Vorgabe genommen und ein evtl. “www” entfernt:
$from_name = 'WordPress';
$sitename = strtolower( $_SERVER['SERVER_NAME'] );
if ( substr( $sitename, 0, 4 ) == 'www.' ) {
$sitename = substr( $sitename, 4 );
}
Die Angaben des SMTP-Hosts und des Ports werden aus der php.ini übernommen. Diese sollten auf dem WordPress-System also korrekt gesetzt sein.
Anpassen der Vorgaben
Wie eben beschrieben werden alle Mails mit vorgegebenen Werten für den Absendernamen und die Absenderadresse verschickt. Will man diese Angaben ändern, müssen entsprechende Filterfunktionen benutzt werden.
- Ändern des Absendernamens:
-
add_filter('wp_mail_from_name', 'my_name'); function my_name() { return 'Latz'; }
- Ändern der Absenderadresse:
-
add_filter('wp_mail_from', 'my_address'); function my_name() { return 'Latz@wp.de'; }
- Eine weitere Möglichkeit Absendernamen und -adresse zu ändern ist die direkte Modifizierung des Mailheaders:
-
$headers = 'From: Latz ' . "rn"; wp_mail('ich@beispiel.net', 'Hallo Welt', 'Hört mich jemand?', $headers);
Des weiteren gibt es noch die Filter wp_mail_charset
und wp_mail_content_type
, die genau wie oben benutzt werden.
Als letztes existiert noch ein Filter (wp_mail_original_content
), mit dem man den Inhalt der Email verändern kann, die erstellt wird, wenn man einen Artikel per Email sendet.
Anhänge
Natürlich ist es auch möglich auf einfache Weise eine oder mehrere Anhänge zu verschicken. Dazu muss an die wp_mail
-Funktion ein Array mit Dateinamen übergeben werden:
$anhang = array(WP_CONTENT_DIR . '/uploads/anhang.zip');
wp_mail('ich@beispiel.net', 'Hallo Welt', 'Hört mich jemand?', $anhang);
Rückgabewert
Die Funktion gibt als Rückgabe einen Bool-Wert zurück. Das bedeutet allerdings nicht, dass beim Rückgabewert “TRUE” die Mail versandt und insbesondere nicht, dass sie empfangen wurde. Er bedeutet lediglich, dass sie korrekt an den SMTP-Host übergeben wurde, was danach mit der Mail passiert kann vom Skript nicht mehr kontrolliert werden.
Leave a Reply