Die folgende Funktion bildet das SMTP (Simple Mail Transfer Protokoll) ab, so dass man auch ohne eigenen Mailservice eine Mail über einen fremden Service absenden kann, bei dem man sich PLAIN authentifizieren muss.
Argument | Bedeutung |
---|---|
to | Empfänger der Mail |
subject | Betreff der Mail |
content | Inhalt der Mail |
from | Absender der Mail |
extra | Weitere Header, in der Regel leer („“) |
myName | Der Name meines Servers |
mail_server | Der Name des SMTP-Servers |
auth_user | Der Benutzername, der dem SMTP-Server bekannt ist |
auth_pass | Das Passwort des Benutzers, der dem SMTP-Server bekannt ist |
Mit diesen Angaben verhält sich die Funktion wie ein E-Mailprogramm, das über den jeweiligen Server eine Mail abschicken möchte.
<? function smtpmail( $to, $subject, $content, $from, $extra, $myName, $mail_server, $auth_user, $auth_pass) { $hdr = "FROM: " . $from . "\x0D\x0A" . "TO: " . $to . "\x0D\x0A" . "Subject: " . $subject . "\x0D\x0A" . $extra . "\x0D\x0A" . "\x0D\x0A" . $content . "\x0D\x0A"; $fp = fsockopen( $mail_server, 25 ); if( !$fp ) DIE("SMTP Server nicht erreichbar: ".$mail_server ); $banner = fgets( $fp, 1024 ); # HELO fputs( $fp, "HELO $myName\x0D\x0A" ); $result = fgets( $fp, 1024 ); if( $result+0 != 220 && $result+0 != 250 ) die( "HELO Statuscode falsch" ); # AUTH fputs( $fp, "AUTH PLAIN ".base64_encode( "\0".$auth_user."\0".$auth_pass )."\x0D\x0A" ); $result = fgets( $fp, 1024 ); if( $result + 0 != 235 ) die( "AUTH LOGIN Authorisierung fehlgeschlagen." ); # MAIL FROM fputs( $fp, "MAIL FROM: ".$from."\x0D\x0A" ); $result = fgets( $fp, 1024 ); if( $result + 0 != 250 ) die( "MAIL FROM Statuscode falsch" ); # RCPT TO fputs( $fp, "RCPT TO: ".$to."\x0D\x0A" ); $result = fgets( $fp, 1024 ); if( $result + 0 != 250 ) die( "RCPT TO: Statuscode falsch".$result ); # DATA fputs( $fp, "DATA\x0D\x0A" ); $result = fgets( $fp, 1024 ); if( $result + 0 != 354 ) die( "DATA Statuscode falsch:".$result ); fputs( $fp, $hdr ); # . fputs( $fp, ".\x0D\x0A" ); $result = fgets( $fp, 1024 ); if( $result + 0 != 250 ) die( "DATA(End) Statuscode falsch:".$result ); # QUIT fputs( $fp, "QUIT\x0D\x0A" ); $result = fgets( $fp, 1024 ); return true; } ?>