Mail() ist tot, es lebe Mail()

Immer wieder stellen wir fest, dass sich Leute mit mail() abquälen wenn sie mit PHP E-Mails versenden wollen.

Die Probleme können hier verschiedene Ursachen haben:
  • unzureichende Kenntnisse über relevante RFC's (Email Regelwerk)
  • unzureichende Kenntnisse über Massenmails (zu viele Empfängeradressen in der Empfängeradresse)
  • fehlende bzw. falsche Mail-Header
  • fehlende Berechtigungen für Emailversand (Authentifizierung
  • und viele mehr .....

Die Wahrscheinlichkeit, dass E-Mails wegen Kleinigkeiten (fehlende Berechtigung, falscher Umbruch, ungültiger Header, falsches Datumsformat, ...) von Mailservern als SPAM markiert werden, ganz abgelehnt werden oder der Mailclient sie am Ende nicht ordentlich darstellen kann ist einfach zu groß.

Die Möglichkeiten eventuelle Fehler zu debuggen sind oftmals sehr schwer, weil sie von vielen Faktoren wie z.B. dem eigenen Mailserver, dem fremden Mailserver, dem Mailclient des Empfängers, der jeweiligen Konfiguration dieser Komponenten und eventueller weiterer Komponenten abhängt.

Das muss absolut nicht sein. Zum verschicken von Emails sollten sie auf fertige, erprobte und getestete Klassen zurückgreifen.

Einige Programme (z.B. TYPO3, JOOMLA, WordPress, etc) bieten bereits fertige Tools für Feedback Formulare an.
Unabhängig vom Programm-Entwicklungssystem bietet TeleMax für den Emailversand "PEARMail" an

Hier ein paar Beispiele:

Email im TEXT-Format versenden                       Hier ein Testlink

 

Hier ein Beispiel für den Einbau in ihre Webseite

<?php
require_once "Mail.php";

$host = "mail.example.com";

$port = "587"

$username = "smtp_Benutzername";
$password = "smtp_passwort";

$from = "Absender Emailadresse>";
$to = "Empfänger Emailadresse>";
$charset = "utf-8";
$subject = "Email per PEAR im TEXT-Format versenden";

// $test1 = "Hurra, das funktioniert";
$body = "Hallo,\n\ndas ist ein Test von\n N  a  m  e\n\nHurra, das funktioniert ";

$headers = array (
   'From' => $from,
   'To' => $to,
   'Subject' => $subject);

$smtp = Mail::factory('smtp', array (
   'auth' => true,
   'host' => $host,
   'port' => $port,
   'username' => $username,
   'password' => $password));

// $mail = $smtp->send($to, $headers, $test1);
$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Email im TEXT-Format erfolgreich gesendet!</p>");
}
?>

 

Email im HTML-Format versenden                       Hier ein Testlink

  Hier ein Beispiel für den Einbau in ihre Webseite
<?php
$data = array();
$data['smtp'] = array();
$data['smtp']['host'] = 'mail.example.com';
$data['smtp']['port'] = '587';
$data['smtp']['username'] = 'smtp_Benutzername';
$data['smtp']['password'] = 'smtp_Passwort';

$data['from'] = array('name' => 'Absender', 'email' => 'absender@example.com');
$data['to'] = array('name' => 'Empfänger', 'email' => 'empfaenger@example.com');
$data['charset'] = 'utf-8';
$data['subject'] = 'Email per PEAR im HTML-Format versenden';
$data['test1'] = 'Hurra, das ist test1';

$data['html'] = '
<html>
    <head>
        <title>'.$data['subject'].'</title>
    </head>
    <body>
        <div>
            <h1>Mail i, HTML-Format</h1>
            <p>
                Hallo,<br>
                das ist ein Test<br>
                Lorem ipsum dolor sit amet.
            </p>
            <p>'.$data['test1'].'</p>
        </div>
    </body>
</html>';

$data['text'] = 'Meine Html-Mail

Lorem ipsum dolor sit amet.';

require_once 'Mail.php';
require_once 'Mail/mime.php';

$options = array( 'auth'     => true,
                  'host'     => $data['smtp']['host'],
                  'port'     => $data['smtp']['port'],
                  'username' => $data['smtp']['username'],
                  'password' => $data['smtp']['password']);

$mailer = Mail::factory('smtp', $options);

$mail = new Mail_Mime(PHP_EOL);
$mail->setHTMLBody($data['html']);                   // HTML-Body
# $mail->setHTMLBody($data['text']);                   // TEXT-Body

$header = $mail->headers();
$header['Subject']      = $data['subject'];         // Betreff setzen
$header['from']         = $data['from']['email'];   // Absender setzen
$Header['to']           = $data['to']['email']      // Empfänger setzen
$header['Content-type'] = 'text/html';
$header['Charset']     = 'UTF-8';

$mailer->send($data['to']['email'], $header, $mail->get());

if (PEAR::isError($mailer)) {
    echo("<p>" . $mailer->getMessage() . "</p>");
   } else {
     echo("<p>Email im HTML-Format erfolgreich versendet!</p>");
   }
?>