Dynamic Web Pages: deutschsprachiger PHP Knotenpunkt seit 1999

Dynamic Web Pages : tutorials _

 
  PHPWorld Kongress  


 
 
 

Offizieller
Konferenz-Partner


php|works & PyWorks 2008 Conference

PHP World Kongress
 


 
 
 
 

PHP QuickRef

Via QuickRef gelangen Sie direkt zur gesuchten Funktion im Handbuch.

 
 

Printmedien

PHP-Magazin
Das PHP Magazin erscheint 2-monatlich zum Preis von 9,80 €. Studenten erfreuen sich über ermäßigte Abos.

PHP-Journal
Das PHP Journal erscheint 2-monatlich zum Preis von 14,95 €. Studenten und Abonnenten erfreuen sich über bis zu 25% Ermäßigung.

PHP Solutions Magazin
Das PHP Solutions Magazin erscheint alle 3 Monate zum Preis von 8,75 €. Studenten erfreuen sich über ermäßigte Abos.

PHP-Architect
Der php|architect erscheint monatlich als digitale PDF-Version zum Preis von $3,99 USD und als Print-Version zum Preis von $8,69 USD. Im Abo gibt es Rabatt (30% Print, 15% PDF).

International PHP Magazine
Das international PHP Magazine erscheint monatlich zum Preis von 4,- € bzw. im Abo für 3,50 € (42,00 € /Jahresabo).

 
Mailen mit PHP
 
Mathias Meyer   Mathias Meyer       

 Inhalt:
1.Die Funktion mail()
2.sendmail
3.SMTP? Nie gehört
4.Newsletter
5.Dateien verschicken

Ein Zweck, dem PHP oft nachkommt, ist das versenden von Mail. Sei es ein Feedback-Formular für die eigene Seite, eine Bestätigung für einen Eintrag in ein Forum oder was auch immer. Die Möglichkeiten sind vielfältig und lassen der Fantasie keine Grenzen ;).

1. Die Funktion mail()

Die praktische Umsetzung ist genauso vielfältig. Die einfachste Möglichkeit dafür wird von PHP geboten. Die Funktion mail() bietet für den Einstieg ausreichend Funktionalität. Sie erwartet als Argumente erstens die eMail-Adresse des Empfaengers, dann das Subject der Mail und schliesslich den Message-Body. Die grundsätzlichste Variante wäre also folgende:

mail("empfaenger@deremail.de", "Mailen mit PHP", "Hallo Empfaenger,\nwusstest du, dass man mit PHP ganz einfach Mails verschicken kann?");

Diese Funktionalität ist allerdings nicht für jedermann ausreichend. So erhält man beim verschicken einer Mail auf o.g. Weise einen eigenartigen Absender, der meistens dem Namen des Users entspricht, der als Standard-Absender in der php.ini angegeben ist. Um dem entgegenzuwirken, bietet PHP noch einen optionalen Parameter an, mit dem zusätzliche Header-Informationen für die Mail angegeben werden können. Dies kann zum Beispiel ein ordentlicher Absender oder eine alternative Antwort-Adresse sein. Das Ergebnis könnte dann wie folgt aussehen:

mail("empfaenger@deremail.de", "Mailen mit PHP", "Hallo Empfaenger, wusstest du, dass man mit PHP ganz einfach Mails verschicken kann?", "From: pom@dynamic-webpages.de\nReply-To: pom@beatsteaks.de\nX-Mailer: Poms Mail Tutorial");

Vorraussetzung für die Funktionalität ist allerdings, dass die php.ini ordentlich editiert ist. Unter UNIX/Linux muss hierfür der Pfad zu sendmail und der Standard-Absender angegeben werden. Unter Windows läuft das etwas anders, da hier SMTP für das Verschicken von Mail mit der mail()-Funktion implementiert wurde. Unter Windows muss dafür in der php.ini ein SMTP-Server für ausgehende Mail angegeben werden anstatt des Pfades von sendmail.

2. sendmail

Dies waren aber noch nicht die einzigen Möglichkeiten, um Mail zu verschicken. Es ist auch möglich, entweder mit sendmail direkt zu arbeiten oder sich über SMTP mit Mail-Servern zu unterhalten. Die erste Möglichkeit ist mein persönlicher Favorit und funktioniert über Prozesszeiger. Hierfür wird die Funktion popen() benutzt, welche als Argumente den Pfad zum auszuführenden Prozess und den Mode erhält. Ersteres Argument ist meistens /usr/lib/sendmail und für letzteres ist der Mode w für Schreiben zu wählen. Der vollständige Aufruf von sendmail wäre also:

$fp = popen("/usr/lib/sendmail -t", "w");

popen() liefert einen Zeiger auf den Prozess, mit dem man dann die Ausgabe vom Prozess bekommen und Eingabe an den Prozess weitergeben kann. Dies lässt sich mit Hilfe der Funktionen fgets() und fputs() umsetzen. Erstere ist aber für uns nicht wichtig, da sendmail nur Eingaben erwartet und nur im Fehlerfall Ausgaben macht. Da ich aber hier die Implementierung sauber vorführe und sendmail im Fall eines Fehlers einfach keine Mail verschickt, sollte dies auch fehl am Platze sein. fputs() ist also die Funktion der Wahl für meinen Zweck. Sie erwartet als ersten Parameter einen Pointer auf eine Datei oder in unserem Falle einen Pointer auf den Prozess. Da beide vom Prinzip her identisch sind, ist dies hier nicht von Bedeutung. Der zweite Parameter von fgets() ist der zu schreibende String. Um also an den von mir weiter oben geöffneten Prozess einen String weiterzugeben, würde der Funktionsaufruf wie folgt lauten:

fputs($fp, "To: empfaenger@deremail.de\n");

Hierbei muss darauf geachtet werden, dass nach dem weitergegebenen String immer mit \n eine neue Zeile eingeleitet wird. Die komplette Implementierung folgt auf den Fuss:

$fp = popen("/usr/lib/sendmail -t ","w"); fputs($fp, "To: empfaenger@deremail.de\n"); fputs($fp, "From: Mathias Meyer \n"); fputs($fp, "Subject: Mailen mit PHP\n\n"); fputs($fp, "Hallo, Empfaenger,\n"); fputs($fp, "wusstest du, dass man mit PHP ganz einfach Mails verschicken kann?"); pclose($fp);

Als erstes wird eine schreibende Verbindung zu sendmail geöffnet. Danach werden die Daten übermittelt. Wichtig hierbei ist das doppelte \n nach dem Subject oder im Anwendungsfall immer nach der letzten angegebenen Header-Zeile. Um das Ganze dann abzuschliessen, muss der Prozess mit pclose() ordentlich geschlossen werden, damit die Mail auch korrekt abgeschickt wird.
Hin wieder kommt die Frage, warum beim Senden von Mail mit sendmail oftmals ein Absender namens nobody@deremail.de oder ähnliches als Absender im Mail-Header steht. Die Antwort ist denkbar einfach. Der häufig verwendete Apache läuft oftmals unter diesem Nutzernamen. Wenn nun vom PHP-Modul aus ein Prozesszeiger auf sendmail geöffnet wird, so geschieht dies logischerweise unter der Nutzer-ID des Apache. Dies kann mehr oder minder grosse Probleme nach sich ziehen. Erstens mal gelangen so eventuelle Fehlermeldungen an die falsche Adresse und zweitens mal siehts einfach besser aus. Um dies nun zu verhindern hängt man an den Aufruf von sendmail, der weiter oben schon durchexerziert wurde, einfach noch den Parameter -f gefolgt von der gewünschten eMail-Adresse an. Somit wird der sogenannte envelope-sender gesetzt. An selbigen gehen nun etwaige Fehlermeldungen, etwa wenn der Empfänger inexistent ist. Ist in solch einem Fall der envelope-sender nicht richtig gesetzt, wird die Fehlermail an eine Adresse gesendet, die zwar existent sein mag, deren Mail aber niemand liest. Bei einem ordentlich gesetzten Alias in der /etc/aliases geht die Fehlermeldung zwar an den SuperUser, aber wer möchte schon den Systemgott mit irgendwelchen Fehlermeldungen belästigen. Ausserdem kann man so eine ganz bestimmte eMail-Adresse setzen, an die beispielsweise beim Versenden von Newslettern die Fehlermeldungen bei nicht existierenden oder falschen Empfängeradressen gesendet werden.
 

[ 1 2 3 4  ]    weiter
 
Mailen mit PHP (43 Kommentare)
  06.10.2000:   möchte newsletter 3000 mal versenden (23)
  27.10.2000:   Warum nicht gleich fputs? (1)
  29.11.2000:   Einfügen des Names in den Newsletter? (4)
  01.12.2000:   pdf-anhang (2)
  04.12.2000:   mail über meinen eigenen windows server (3)
  05.12.2000:   Ich möchte HTML Mails verschicken (2)
  11.12.2000:   Eintrag in die php.ini (0)
  13.12.2000:   SMTP-Server in PHP.INI eintragen (4)
  18.12.2000:   Sendmail? (1)
  22.01.2001:   smtp-server-software (1)
  25.01.2001:   Zeilenumbruch (3)
  01.02.2001:   -f parameter (3)
  04.03.2001:   attachment name (0)
  09.04.2001:   newsletter via popen() (1)
  19.04.2001:   SMTP Authentifizierung (2)
  27.04.2001:   Mail wird bei 230 nicht mehr versendet (0)
  02.05.2001:   Probleme mit mail() (2)
  05.07.2001:   Probleme mit mail() (1)
  10.07.2001:   Anhang versenden (0)
  13.08.2001:   Datei + PHPmail (0)
  20.08.2001:   Newsletter in PHP (4)
  29.08.2001:   Attachements versenden klappt nicht auf gmx-Accounts !? (2)
  04.12.2001:   Newsletter versenden in verbindung mit Oracle (0)
  15.03.2002:   SMS per eMail mit PHP (0)
  29.05.2002:   E-Mails sicher versenden! (0)
  18.07.2002:   Gibt es ein tutorial, indem man selber Portale schreiben kann? (0)
  19.09.2002:   Passwort beim Postausgangsserver (2)
  27.09.2002:   HTML-Mail funktioniert nicht ! (2)
  05.12.2002:   SMTP über Exchange (2)
  26.03.2003:   Newsletterversand-Probleme bei AOL (1)
  31.03.2003:   HTML-Email für Entorage (3)
  02.05.2003:   newsletter funktioniert nicht?! (0)
  19.06.2003:   Zugriff auf POP3 Server (2)
  22.08.2003:   SMTP - Fehler beim senden von Mails (0)
  02.09.2003:   Und wer sagt was zum (pop3) Abruf? (0)
  ..:   HTML mails als reiner Text nicht darstellbar (-1)
  30.03.2004:   SMTP-AUTH (0)
  07.04.2004:   sendmail funktioniert nicht wie es soll (0)
  21.12.2004:   SMTP-Mails an AOL (0)
  09.08.2005:   e-mail an absender (0)
  16.09.2006:   Kategorie (0)
  17.11.2006:   vozkugx atfjmpc (0)
  17.11.2006:   vozkugx atfjmpc (0)
zurück
   
powered by Hetzner


top Alle Rechte vorbehalten. © Dynamic Web Pages 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 top

  Seitenaufbau in 3.654 Sekunden
 
Werbung an/aus Werbung aus Werbung an