Björn Schotte: Mail verschicken, Absender aber mit angeben

Beitrag lesen

Aber ich habe als Absender immer "cgi-mailer". Da möchte ich aber eine bestimmte Absender-Adr eintragen.
Ist das möglich, wenn ja wie?

Ja. Zunächst einmal mußt du verstehen, wie E-Mail funktioniert. Stell' dir vor,
du hast einen Briefumschlag (auf dem Absender+Empfänger stehen) sowie
den eigentlichen Brief (auf dem auch Absender+Empfänger stehen).

Die Absender-/Empfänger-Daten auf dem Umschlag und im eigentlichen
Brief können verschieden sein. Wichtig für den Versand der E-Mail ist
zunächst einmal, was auf dem Briefumschlag steht (der Postbote schaut
ja auch auf den Briefumschlag).

Diese Daten, die auf dem Briefumschlag stehen, werden zwischen deinem
Mailprogramm und dem Mailserver deines Providers ausgetauscht (das nennt
man den SMTP-Dialog). Hier teilt dein Mailer dem Mailserver mit "Diese Mail
soll an bjoern@baer.main.de ausgeliefert werden" -- jedoch könnte im Brief selbst
stehen, dass die E-Mail an president@whitehouse.gov ausgeliefert werden
sollte.

Die PHP-Funktion mail(), die dir genannt wurde, kann nur die Daten im Brief
beeinflussen. Den Absender, den du beschriebst, war der User deines PHP CGI
Binaries, also der User, unter dem der Prozeß PHP läuft (das ist etwas schwierig
zu erklären, weil man dazu verstehen muß, dass es unter unixoiden Betriebssystemen,
z.B. Linux, verschiedene User mit verschiedenen Rechten gibt).

Es gibt deswegen mehrere Möglichkeiten, das zu beeinflussen. Die erste Möglichkeit,
die nur die Daten im eigentlichen Brief beeinflußt, wurde dir schon genannt: mail().
Die zweite Möglichkeit wäre, in der Datei php3.ini (bzw. php.ini ab PHP4) einen
bestimmten Eintrag zu ändern -- ich vermute aber, dass du keinen Zugriff auf diese
Datei hast. Die letzte, empfehlenswerte Möglichkeit ist folgendes Stück Programmcode:

$absender = "deine@mail.adres.se";
if ($fp=popen("sendmail -t -f $absender","w"))
{
   fputs($fp,"From: deine@mail.adres.se\n".
                   "To: da@solls.hin\n".
                   "Subject: subject\n\n".
                   "Inhalt der Mail");
   pclose($fp);
}

Damit rufst du das Programm sendmail auf, dass den Mail Transport Agent
darstellt. Ihm übergibst du mit dem Parameter -f den Absender des Briefumschlags.
Danach schreibst du die eigentliche E-Mail inklusive aller Header und fertig.

Diese Methode ist empfehlenswert, falls es mal zu Bounces (also nicht-Zustellbarkeit
von E-Mails) kommt: die Bounce-Meldungen werden nämlich *immer* an den
Absender des Briefumschlags geschickt -- würdest du also via mail() deine
Mails verschicken, würden die Bounce-Meldungen in der Mailbox deines
Systemadministrators auftreffen. Mit der gerade eben beschriebenen Methode
kannst du dies verhindern.

Falls du weiterführende Informationen möchtest, schau mal auf
http://www.php-center.de/faq/ dort gibt es ein sehr ausführliches
Kapitel zum Thema "Mailen mit PHP".