ID #1075

Wie kann ich eMails in PHP über meinen SMTP Server versenden?

Oft werden in einem PHP Formular eMails einfach mit der PHP Funktion mail() über den Webserver versandt. Wenn andere Kunden desselben Webservers durch SPAM die TCP/IP Adresse des Servers in Blacklisten bringen, entstehen aber leicht unvorhersehbare Probleme. Das Versenden der eMails über die PHP Funktion mail() funktioniert einmal und ein anderes mal wieder nicht. Je nachdem, ob der Server in letzter Zeit SPAM versendet hat oder gerade in keiner Blacklist aufscheint.

Als erstes empfehlen wir euch ein kleines Script zur Validierung von Emailadressen:

--------------------------------- CODE BEGINN  ------------------------------------

// include SMTP Email Validation Class
require_once('smtp_validateEmail.class.php');
 
// the email to validate
$email = 'user@example.com';
// an optional sender
$sender = 'user@mydomain.com';
// instantiate the class
$SMTP_Validator = new SMTP_validateEmail();
// turn on debugging if you want to view the SMTP transaction
$SMTP_Validator->debug = true;
// do the validation
$results = $SMTP_Validator->validate(array($email), $sender);
// view results
echo $email.' is '.($results[$email] ? 'valid' : 'invalid')."\n";
 
// send email?
if ($results[$email]) {
  //mail($email, 'Confirm Email', 'Please reply to this email to confirm', 'From:'.$sender."\r\n"); // send email
} else {
  echo 'The email addresses you entered is not valid';
}

Die Klasse gibt es hier zum download: http://code.google.com/p/php-smtp-email-validation/

Packe den Code in eine PHP-Datei, befördere diese zusammen mit der Klassendatei auf den Webspace und teste. Zusätzlich füge am Ende noch besagten Mail()-Aufruf ein. So siehst du, ob die Mails unabhängig von der aufrufenden Anwendung versendet werden.
Jetzt sollten alle Email-Adressen die du prüfst ok sein, es sei denn du machst absichtlich Fehler rein.

Jetzt kommen wir zum eigentlichen versenden über deinen SMTP Server: Wenn du Mail über den smtp.IFO.net Server  versenden möchtest, muß sich das Script am SMTP Server anmelden um eine Mail versenden zu dürfen.

Hier findest du ein einfaches Script zum versenden der eMails über den externen SMTP Server.

--------------------------------- CODE BEGINN  ------------------------------------

<?php
 require_once "Mail.php";
 
 $from = "Eva Sender <eva@example.com>";
 $to = "Max Mustermann <max@example.com>";
 $subject = "Hallo!";
 $body = "Hallo,\n\nwie geht es dir?";
 
 $host = "smtp.IFO.net";
 $username = "smtp_username";
 $password = "smtp_password";
 
 $headers = array ('From' => $from,
   'To' => $to,
   'Subject' => $subject);
 $smtp = Mail::factory('smtp',
   array ('host' => $host,
     'auth' => true,
     'username' => $username,
     'password' => $password));
 
 $mail = $smtp->send($to, $headers, $body);
 
 if (PEAR::isError($mail)) {
   echo("<p>" . $mail->getMessage() . "</p>");
  } else {
   echo("<p>Message successfully sent!</p>");
  }
 ?>

Verwende deine SMTP-Anmeldedaten von deinem Serviceprovider und füge diese an den entsprechenden Stellen ein und … schon sollte es funktionieren.

Mittels dieses Scripts klappt das Versenden von Emails via SMTP Authentication problemlos. Passe alle Funktionen zum Versenden von Emails in deiner Anwendung an und schon klappt der Emailversand innerhalb deiner Applikation wieder zuverlässig.

Tags: -

Verwandte Artikel:

Es ist möglich, diese FAQ zu kommentieren.