PHP-Mailer und Strato

Hallo,

ich möchte den PHP-Mailer (phpmailer.sourceforge.net) nutzen, um über ein Strato-Postfach E-Mails zu verschicken. Das Script liegt auch auf einem Strato-Server.

Mein Code lautet:

require("phpmailer/class.phpmailer.php");

$To = $\_GET['email'];
$From = "[email protected]";
$FromName = "Ticketserver"; 
$Subject= "Konto aktivieren";
$Host = "smtp.strato.de";

$Mail = new PHPMailer();

$Mail-\>IsSMTP();
$Mail-\>Host = $Host;
$Mail-\>SMTPAuth=true;
$Mail-\>Username="[email protected]";
$Mail-&gt:stuck\_out\_tongue\_winking\_eye:assword="ABCDEFG";

$Mail-\>From = $From;
$Mail-\>FromName = $FromName;
$Mail-\>AddAddress($To);
$Mail-\>AddReplyTo("[email protected]");

$Mail-\>WordWrap = 50;
$Mail-\>IsHTML(true);

$Mail-\>$Subject;

$Message ="Nachricht"

Mail-\>Body = $Message;

if($Mail-\>Send())
 {
 echo "Message Sent";
 }
 else
 {
 echo "Message Not Sent
";
 echo "Mailer Error: " . $Mail-\>ErrorInfo;
 }

Ich erhalte immer nur die Meldung: Mailer Error: SMTP Error: Could not connect to SMTP host.

Woran liegt das? Andere SMTP-Server gehen auch nicht, z.B. gmx

Viele Grüße

Kai

Gegenfrage: was spricht gegen dein Einsatz von mail() ?
Funktioniert der phpmailer auf deiner Entwicklungsumgebung?
Mal in den FAQs von Strato geschaut ob sie evtl. direkten Mailverkehr (SMTP) nach aussen sperren? (verhinderung von Spam)

Gruss
Stefan

Hi Stefan,

Gegenfrage: was spricht gegen dein Einsatz von mail() ?

Gegen den Einsatz von mail() spricht, dass ich eine bestimmte E-Mail-Adresse als Absender haben möchte und wenn ich versuche auf einen SMTP-Server zu gehen, habe ich das Problem, dass ich mich Authentifizieren muss.

Funktioniert der phpmailer auf deiner Entwicklungsumgebung?

Auch da nutze ich ein Strato-Postfach. => geht leider nicht.

Mal in den FAQs von Strato geschaut ob sie evtl. direkten
Mailverkehr (SMTP) nach aussen sperren? (verhinderung von
Spam)

Strato schreibt dazu:

Der Versand von E-Mails mittels CGI- oder PHP-Skripten
ist nur unter der Verwendung des STRATO SMTP-Servers möglich.

Tragen Sie in diesem Fall in Ihrem Skript als Mailserver 'smtp.strato.de'. ein.
Ihr Benutzername wird nach dem Muster [email protected] angegeben.
Ihr Passwort ist das bei der E-Mailbox Einrichtung selbst gewählte Passwort.

Beachten Sie hierbei bitte, dass es nicht möglich ist eine Verbindung
zu externen SMTP-Server auf dem Port 25 herzustellen. Diese 
öglichkeit wird meist von Spamscripten benutzt um massenhaft E-Mails
zu versenden und stellt daher eine Gefahr für Ihren Kundenaccount 
dar.
Quelle: Strato-FAQ; Artikel-ID: 2322

Ich verstehe das so, dass ich auf den Strato-SMTP-Server zugreifen kann, wenn ich auf einer Strato-Seite bin, aber von Strato-Servern nicht auf fremte SMTP-Server zugreifen kann.

Gruss
Stefan

Viele Grüße

Kai

Moin!

Gegen den Einsatz von mail() spricht, dass ich eine bestimmte
E-Mail-Adresse als Absender haben möchte

Das muss ja eine sein, die auch existiert.

und wenn ich versuche
auf einen SMTP-Server zu gehen, habe ich das Problem, dass ich
mich Authentifizieren muss.

Das sollte eigentlich überall der Fall sein. Sonst könnte man ja mit jeder beliebigen, auch nicht existenten, Absenderadresse Mails verschicken.

Ich verstehe das so, dass ich auf den Strato-SMTP-Server
zugreifen kann, wenn ich auf einer Strato-Seite bin, aber von
Strato-Servern nicht auf fremte SMTP-Server zugreifen kann.

Aber Dich da natürlich auch genauso autentifizieren musst. Und das scheint doch das Problem zu sein, dass das schief geht. Dein Beitrag liest sich so, als wolltest Du eine Absenderadresse benutzen, die es nicht gibt.

Liebe Grüße,
-Efchen

Das sollte eigentlich überall der Fall sein. Sonst könnte man
ja mit jeder beliebigen, auch nicht existenten,
Absenderadresse Mails verschicken.

wird aber laut internet nicht von der mail() funktion unterstützt.

Ich verstehe das so, dass ich auf den Strato-SMTP-Server
zugreifen kann, wenn ich auf einer Strato-Seite bin, aber von
Strato-Servern nicht auf fremte SMTP-Server zugreifen kann.

Aber Dich da natürlich auch genauso autentifizieren musst. Und
das scheint doch das Problem zu sein, dass das schief geht.
Dein Beitrag liest sich so, als wolltest Du eine
Absenderadresse benutzen, die es nicht gibt.

Richtig. Deswegen wollte ich ja die PHPmailer-Class benutzen, der ich nur noch die Informationen übergeben muss, wie Benutzername, Kennwort, u.s.w.

Die E-Mail-Adresse existiert. Ich habe Sie bei Strato angelegt, und kann auch Mails an die Adresse schicken, sowie mich anmelden.

Liebe Grüße,
-Efchen

Viele Grüße

Kai

Moin!

Gegenfrage: was spricht gegen dein Einsatz von mail() ?

Es spricht so ziemlich ALLES gegen den Einsatz von mail(), gerade wenn produktiv E-Mails verschickt werden müssen. Punkt ist nämlich der: mail() verschickt eine E-Mail über den Web-Server. Dieser stimmt nicht zwangsläufig mit dem E-Mail-Server überein, was auf vielen E-Mail-Servern dann dazu führt, dass die E-Mail als Spam erkannt und im besten Fall im Spam-Ordner zugestellt wird - im schlimmsten Fall wird die E-Mail verweigert. Dazu kommt noch, dass man sich um alles, von der Kodierung bis hin zu Header-Einträgen selber kümmern muss, was einem eine vernünftige Klasse abnimmt.

Funktioniert der phpmailer auf deiner Entwicklungsumgebung?
Mal in den FAQs von Strato geschaut ob sie evtl. direkten
Mailverkehr (SMTP) nach aussen sperren? (verhinderung von
Spam)

Gruss
Stefan

Ich habe zu diesem Thema mal ein Tutorial auf Basis des Zend-Frameworks geschrieben: http://www.developers-guide.net/c/160-zend-framework…
Ich gehe in dem Tutorial auch auf einige Umstände ein, die dazu führen, dass der Spam-Wert erhöht ist, wenn man bestimmte Dinge nicht beachtet. Ich habe es jedenfalls hinbekommen E-Mails zu verschicken, die einen Spam-Wert von 0,0 haben, was mit mail() in so ziemlich keinem Fall so ist - außer der Programmierer hat sich wirklich viel Mühe gegeben und die Rahmenbedingungen passen komplett.

MfG
Lutz

Richtig. Deswegen wollte ich ja die PHPmailer-Class benutzen,
der ich nur noch die Informationen übergeben muss, wie
Benutzername, Kennwort, u.s.w.

Das wird aber bestimmt ein Problem ergeben . wird das skript sehr offt aufgerufen, hat man das problem das auch immer wieder authentifiziert wird , das mögen aber viele (externen ) email server nicht, da es wie spam gesehen wird . Ergo schliessen die meisten server bei zuvielen Anfrangen pro minute die authentifizierung ganz für ein paar minuten .

Und strato nimmt nur aufträge engegen über ihre tools , da kann man nicht einfach ein Email Client nehmen und loslegen, offt sind auch die Ports dicht .

Moin!

Hast du mal versucht folgende Zeile hinzuzufügen und zu schauen, was dir die Klasse zurückliefert an Informationen?

$mail-\>SMTPDebug = 2;

Wäre sicher hilfreich. Ansonsten sollte eine Verbindung zu SMTP durchaus möglich sein. Alternative Fehlerquelle wäre eventuell deaktivierte fsockopen()-Funktion (z.B. durch den PHP-Safe-Mode)!?

MfG
Lutz

[Offtopic]

Es spricht so ziemlich ALLES gegen den Einsatz von mail(),
gerade wenn produktiv E-Mails verschickt werden müssen. Punkt
ist nämlich der: mail() verschickt eine E-Mail über den
Web-Server.

Dieser stimmt nicht zwangsläufig mit dem
E-Mail-Server überein, was auf vielen E-Mail-Servern dann dazu
führt, dass die E-Mail als Spam erkannt und im besten Fall im
Spam-Ordner zugestellt wird

Dann ist allerdings der SMTP-Dienst (sendmail) auf dem Server falsch konfiguriert oder in der PHP-Config der Pfad zum versendenden Programm falsch definiert.

Dazu kommt noch, dass man sich um alles,
von der Kodierung bis hin zu Header-Einträgen selber kümmern
muss, was einem eine vernünftige Klasse abnimmt.

Das steht allgemein ausser Frage. Aber um eine einfache Mail (mit evtl. einem anderem Absender zu versenden) reicht die mail() Funktion im allgemeinen aus.

Gruss
Stefan

Moin!

[Offtopic]

Wenn du das so siehst!? :smile:

Es spricht so ziemlich ALLES gegen den Einsatz von mail(),
gerade wenn produktiv E-Mails verschickt werden müssen. Punkt
ist nämlich der: mail() verschickt eine E-Mail über den
Web-Server.

Dieser stimmt nicht zwangsläufig mit dem
E-Mail-Server überein, was auf vielen E-Mail-Servern dann dazu
führt, dass die E-Mail als Spam erkannt und im besten Fall im
Spam-Ordner zugestellt wird

Dann ist allerdings der SMTP-Dienst (sendmail) auf dem Server
falsch konfiguriert oder in der PHP-Config der Pfad zum
versendenden Programm falsch definiert.

Welcher Hoster konfiguriert seinen Sendmail in PHP so, dass er - inklusive Authentifizierung - E-Mails über einen Mail-Server schickt? Nicht alle Hoster haben den E-Mail-Server auf dem gleichen Rechner laufen wie den Webserver. In diesem Fall wäre die Absende-IP die des Webservers und würde nicht mit der IP vom E-Mail-Server (MX-Record im DNS) übereinstimmen, was viele E-Mail-Provider als Spam ansehen oder sogar generell die Annahme verweigern. Abgesehen davon ist ein Versenden von E-Mails ohne Authentifizierung nie ratsam - außer im Test-Fall, womit ich dir Recht gebe. Aber: Davon wurde ebensowenig gesagt, wie von einer Produktivumgebung. Trotzdem ist die SMTP-Variante immer die zu bevorzugende in meinen Augen.

Dazu kommt noch, dass man sich um alles,
von der Kodierung bis hin zu Header-Einträgen selber kümmern
muss, was einem eine vernünftige Klasse abnimmt.

Das steht allgemein ausser Frage. Aber um eine einfache Mail
(mit evtl. einem anderem Absender zu versenden) reicht die
mail() Funktion im allgemeinen aus.

Gruss
Stefan

MfG
Lutz

Hallo,

nachdem ich die Zeile im Code untergebracht habe (nach $mail-&gt:stuck_out_tongue_winking_eye:assword) blieb die Fehlermeldung:

Message Not Sent
Mailer Error: SMTP Error: Could not connect to SMTP host.

Die Fehlermeldung kommt aus echo $Mail->ErrorInfo;

Viele Grüße

Kai

Moin!

Hmm… das sieht danach aus, dass der Fehler aus der Verbindung resultiert, demnach müsste fsockopen() scheinbar gehen!? Kannst du mal die IP-Adresse zum Host smtp.strato.de über das PHP-Script rausfinden? Eventuell ein DNS-Abfrage-Problem? Ansonsten ist der Server nämlich unter dem Standard-Port (25) erreichbar (von mir hier zu Hause aus). Letzte Möglichkeit wäre sonst noch die Firewall-Einstellung auf dem Server, aber das kann ich mir nicht vorstellen.

MfG
Lutz