WordPress Mail-Funktion wp_mail()

14. Oktober 2010 - WordPress Funktionen - 4 Kommentare

WordPress Mail-Funktion wp_mail()

Für das Versenden von E-Mails aus einem Theme oder Plugin heraus stellt uns WordPress die Funktion wp_mail() zur Verfügung. Diese ist der PHP-Funktion für den Mail-Versand sehr ähnlich, vereinfacht jedoch z. B. das Hinzufügen von Anhängen und ist durch Filter leicht veränder- oder erweiterbar.

Anwendung

Wie gesagt, ist die Funktion wp_mail() seinem ursprünglichen PHP-Pendant mail() sehr ähnlich und wird Euch daher bekannt vorkommen.

<?php wp_mail( $to, $subject, $message, $headers, $attachments ); ?>
  • $to: mehrere Adressen durch Kommas trennen oder in einem Array übergeben
  • $subject: Betreff als Text-String
  • $headers: zumindest From: My Name <myname@mydomain.com> erforderlich
  • $attachments: Array von Pfaden anzuhängender Dateien

Beispiel

Ein funktionierendes Beispiel von wp_mail() wäre folgendes:

<?php
    $mail_to = 'empfaenger@email.de';
    $subject = 'Betreffendes';
    
    $message = 'Ich will keine Message, ich will lieber ne Massage!';
    
    $headers = 'From: Dein Name <absender@email.de>' . "\r\n\";
    $attachments = array(WP_CONTENT_DIR . '/uploads/file_to_attach.zip');
   
    wp_mail($mail_to, $subject, $message, $headers, $attachments);
       
?>

Wichtig ist hierbei zu wissen, dass zum korrekten Versenden der Nachricht zumindest der zusätzliche Header From: mit der Absenderadresse nötig ist.

HTML-Mails

Standardmäßig ist der Content-type der durch wp_mail() versendeten E-Mails reiner Text (text/plain). Es ist also erstmal kein HTML möglich.

Mit dem Filter wp_mail_content_type kann man den Content-type verändern und auf text/html setzen:

<?php
    function wdm_contenttype($content_type) {
        return 'text/html';
    }
    add_filter('wp_mail_content_type','wdm_contenttype');
       
?>

Relevante Links

Autor

Moin, ich bin Simon und ehemaliger Betreiber dieses Blogs.

RSS abonnieren

und so weiter...

Kommentare

  • Markus - am 14. Oktober 2010 - Antworten

    ich hab bei meinem contact form immer @mail() hergenommen ;)
    wie schaut es den mit mit umlauten und encoding aus?

    • Simon [webdemar] - am 14. Oktober 2010 - Antworten

      Ja mail() geht natürlich auch. Das habe ich bisher auch so gemacht. Mit wp_mail() verwendest Du dann eben die in WordPress enthaltene PHPMailer-Klasse. Damit wird standardmäßig das im Backend unter Einstellungen > Lesen eingestellte Zeichensatz – meist ja UTF-8 – verwendet. Diesen kannste aber auch mit den zusätzlichen Headern setzen:

      $headers = "From: Dein Name \n" . "Content-Type: text/plain; charset=\"" . get_option('blog_charset') . "\"\n";

  • Markus - am 14. Oktober 2010 - Antworten

    hab es vorher getest
    scheint alles zu laufen ;)

  • martin - am 30. Oktober 2010 - Antworten

    hallo!

    ich habe UniSphere Vision 1.0 by Anonymous als Template!
    Da ist die EMAIL/CONTACT Funktion irgendwie nicht aktiv bzw. in Ordnung.

    D.h. wenn emails geschrieben darüber werden, dann werden diese nicht verschickt.

    habs über mehrere email adressen versucht.

    Das Plugin WPshopgermany von maennchen1.de basiert anscheinend auch darauf und ich bekomme momentan keine EMAIL über Bestellungseingänge. Auch der Kunde bekommt keine automatische Bestätigungdmail.

    Hat jemand ne Idee, woran das liegen kann?

    Vielen Dank!

    Martin

Deine Meinung