php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 26-05-2010, 15:38
Piremilok
 Registrierter Benutzer
Links : Onlinestatus : Piremilok ist offline
Registriert seit: Jul 2006
Beiträge: 95
Piremilok ist zur Zeit noch ein unbeschriebenes Blatt
Standard E-Mails direkt an SMTP versenden

Hallo,

ich möchte gerne E-Mails direkt an einen SMTP versenden. (Ich weiß, dass es Sendmail und andere Klassen gibt...)
Das klappt eigentlich auch ganz gut, aber hin und wieder bekomme ich vom Server einfach keine Antwort mehr.

Hier mal ne Log:
Zitat:
C Connect to mail.empfaenger.de
S 220 mail.empfaenger.de ESMTP
C HELO sender.de
S 250 mail.empfaenger.de Ok. (16.43 ms)
C MAIL FROM: <email@sender.de>
S 250 Ok. (16.44 ms)
C RCPT TO: <email@empfaenger.de>
S (1999.85 ms)
C Close socket connection
S Connection closed gracefully
Eine Domain wäre z.B. exeland.de

Mein Vorgehen:
Ich öffne eine Socket-Verbindung mittels fsocket.
Sende mein Kommando.
Lese die Antwort aus.
Schließe die Verbindung.

PHP-Code:
$cmds = array(
    
//'helo' => "HELO sender.de",
    
'helo' => "EHLO sender.de",
    
'from' => "MAIL FROM:<email@sender.de>",
    
'rcpt' => "RCPT TO:<".$email.">",
    
'data' => 'DATA',
    ...
);

$sock fsockopen($mx_record$port);
fwrite($sock$cmds['helo']."\r\n");
echo 
fgets($sock);
fwrite($sock$cmds['from']."\r\n");
echo 
fgets($sock);
fwrite($sock$cmds['rcpt']."\r\n");
echo 
fgets($sock);
...
fclose($sock); 
Die Befehle sind auch alle in Ordnung, da es in 80% alle Fälle reibungslos funktioniert. Ich habe es sowohl mit dem Startbefehl HELO, als auch mit EHLO versucht.
Das Ergebnis ist das gleiche.

Seht ihr vielleicht, woran es evtl. liegen könnte?
Vielen Dank.

Geändert von Piremilok (28-05-2010 um 09:21 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 26-05-2010, 19:31
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Tritt dieses Phänomen nur nach RCPT-TO auf?
Welche SMTP-Software läuft bei der Gegenstelle, wenn das Phänomen auftritt? Immer die selbe, vielleicht sogar eine bestimmte Version oder siehst du da keinen Zusammenhang?
Kannst du Socketfehler jeglicher Art auf deiner Seite ausschließen, z.B. weil du den Code schon auf anderen (Betriebs-)Systemen getestet hast und dort ebenfalls das Phänomen auftrat?
Mit Zitat antworten
  #3 (permalink)  
Alt 26-05-2010, 23:00
Piremilok
 Registrierter Benutzer
Links : Onlinestatus : Piremilok ist offline
Registriert seit: Jul 2006
Beiträge: 95
Piremilok ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

das Phänomen tritt immer nach RCPT TO auf. Nur dort.
Hier noch ein paar Begrüßungen von Mailservern:

Zitat:
S 220 remote.age.ch Microsoft ESMTP MAIL Service ready at Tue, 25 May 2010 21:39:13 +0200
S 220 11.mx.freenet.de ESMTP Exim 4.72
S 220 mail.viscomp.bg ESMTP Postfix (Debian/GNU)
S 220 mx.europublic.de Microsoft ESMTP MAIL Service, Version: 6.0.3790.4675 ready at Tue, 25 May 2010 21:42:08 +0200
S 220 h954778.serverkompetenz.net ESMTP
S 220 mail.cs.vassar.edu ESMTP Postfix (Debian/GNU)
S 220 mail.ip4-gmbh.de ESMTP Exim 4.63 Tue, 25 May 2010 22:03:35 +0200
S 220 relay.tronicplanet.de ESMTP
S 220 www.aposolutions.com ESMTP
S 220 mx1.heinlein-support.de ESMTP Postfix
S 220 SMTP Server #40 p=40 q=49 s=36
S 220 mail.nassau.dk SMTP service ready
Auffällig ist, dass die meisten ESMTP-Server sind. Jedoch sind auch viele dabei, die einfach nur SMTP ausgeben (oder gar nichts).

Ansonsten ist die eingesetzte Software ziemlich verschieden.
Kann das leider nicht auf verschiedenen Systemen von mir aus testen.
Also ich hab das auf meinem Rechner privat (xampp) und online auf meinem Webspace getestet.
Mit Zitat antworten
  #4 (permalink)  
Alt 26-05-2010, 23:41
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Nach dem Senden eines Kommandos liest du mit fgets() jeweils eine Zeile, jedoch ist die Antwort des Servers, vor allem nach EHLO, i.d.R. mehrzeilig. Hole dir mal die kompletten Antworten und schau sie im Fehlerfall genauer an.
Mit Zitat antworten
  #5 (permalink)  
Alt 27-05-2010, 08:31
Piremilok
 Registrierter Benutzer
Links : Onlinestatus : Piremilok ist offline
Registriert seit: Jul 2006
Beiträge: 95
Piremilok ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

das mache ich.
Das waren auch immer die kompletten Antworten der Server.
Da ich immer mit HELO begrüße, gibt er mir nicht die erweiterten Informationen von EHLO aus.
Jedoch habe ich testweise das Ganze auch mit EHLO probiert und erhalte aber wieder keine Antwort vom Server.

Ich werd das aber nochmal umschreiben, sodass er bei ESMTP immer mit EHLO
begrüßt.

Hier mein Code für das Auslesen der Antworten:

PHP-Code:
$response = array();
while(
preg_match('/^\d\d\d-/'$r fgets($this->sock))) {
    
$response[] = $r;
}
$response[] = $r

Hier noch einmal eine Log mit ESMTP. Er reagiert auch nicht mehr auf danach folgende Befehle...
Zitat:
C Connect to exeland.de
S 220 exeland-Server.ff9.de ESMTP exeland-Server.ff9.de
C EHLO sender.de
S 250-exeland-Server.ff9.de
250-PIPELINING
250-SIZE 629145600
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-XVERP
250 8BITMIME (18.10 ms)
C MAIL FROM: <email@sender.de>
S 250 Ok (83.68 ms)
C RCPT TO: <irgendwas@exeland.de>
S (1999.28 ms)
C QUIT
S (2000.30 ms)
C Close socket connection
S Connection closed gracefully

Geändert von Piremilok (27-05-2010 um 08:38 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 27-05-2010, 10:58
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Ich vermute inzwischen, dass die Mailserver, die irgendwann nicht mehr antworten, dich nur in der Leitung halten wollen, um deine Ressourcen zu binden. Sonst würden sie ordnungsgemäß mit einem SMTP-Code antworten.
Steht dein Server in irgendwelchen RBLs?
Stimmt der Reverse-DNS-Eintrag zu deiner IP mit dem überein, was du beim HELO/EHLO angibst?
Existiert die Absenderadresse (MAIL-FROM)?
Wie stehts mit MX- und SPF-Einträgen für die Absenderdomain?
Existiert die Empfängeradresse?
Wird die Empfängerdomain wirklich vom angerufenen MX geführt?
Mit Zitat antworten
  #7 (permalink)  
Alt 27-05-2010, 22:14
Piremilok
 Registrierter Benutzer
Links : Onlinestatus : Piremilok ist offline
Registriert seit: Jul 2006
Beiträge: 95
Piremilok ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

1. Ja, steht auf 1 Blacklist, aber erst seit heute morgen. Die Probleme sind aber seit längerem und aktuelle Tests von gerade eben liefern immernoch das gleiche Problem.

2. Reverse-DNS-Eintrag: Müsste stimmen, gebe die meine Domain an, und rufe das Script über diese Domain auch auf.

3. Absendermail existiert

4. MX-Einträge existieren auch, da ja die Absendermail existiert und ich darüber auch E-Mails empfangen und verschicken kann.

5. Empfängeradresse existiert

6. Mit getmxrr() suche ich erstmal nach mx-records für die Domain und connecte anschließend zu diesen. D.h. die Empfänger-Mailadresse müsste darüber erreichbar sein.


Vielen Dank schon einmal für die bisherige Hilfe.

gruß
Piremilok

Geändert von Piremilok (27-05-2010 um 22:24 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 27-05-2010, 23:00
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

hast du die SMTP-Session schon mal mit telnet durchgespielt? Da sieht man am ehesten, was wirklich passiert.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 28-05-2010, 08:57
Piremilok
 Registrierter Benutzer
Links : Onlinestatus : Piremilok ist offline
Registriert seit: Jul 2006
Beiträge: 95
Piremilok ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

vielen Dank für den Tipp.
Hatte ich vorher nicht.

Also, die Server antworten scheinbar alle, nur brauchen sie ziemlich lange.
Einer gab mir aus, dass er RBLs gecheckt hat und meine dynam. IP (Telnet --> mein Computer) nicht zulässig ist.

Dann ist mir aufgefallen, dass der Abbruch immer nach ca. 2 Sekunden erfolgt.
Ich habe beim Öffnen der Verbindung stream_set_timeout() auf 2 Sekunden gesetzt. Nachdem ich diesen auf 10 Sekunden erhöht habe erhalte ich auch die Meldungen per fgets zurückgeliefert.

An und für sich ist das aber keine dauerhafte Lösung, denn mehrfach 5-10 Sekunden nur auf ne Serverantwort zu warten verbraucht immens Zeit...
Aber ich sehe leider auch keine Möglichkeit das zu optimieren.
Ihr etwa?

Vielen Dank noch einmal für eure Hilfe.
Ihr habt mir sehr geholfen.




gruß
Piremilok
Mit Zitat antworten
  #10 (permalink)  
Alt 28-05-2010, 12:44
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von Piremilok Beitrag anzeigen
An und für sich ist das aber keine dauerhafte Lösung, denn mehrfach 5-10 Sekunden nur auf ne Serverantwort zu warten verbraucht immens Zeit...
Die SMTP-Spezifikation macht keine Vorgaben zu Timeouts. Meistens nimmt man 30 Sekunden. Wenn dir damit das Versenden aller Mails zu lange dauert, kannst du es parallelisieren - dein OS kann mehrere tausend Sockets gleichzeitig handeln.

Reagierst du eigentlich auf temporäre Fehler, z.B. Greylisting? Versuchst du die Mail später erneut zu versenden?
Mit Zitat antworten
  #11 (permalink)  
Alt 28-05-2010, 17:23
Piremilok
 Registrierter Benutzer
Links : Onlinestatus : Piremilok ist offline
Registriert seit: Jul 2006
Beiträge: 95
Piremilok ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

die Fehler fange ich alle ab und verarbeite sie (Greylisting, Block von Server, 550 unverified address, etc.).

Das Problem mit den gleichzeitigen Verbindungen ist, wenn dann zufällig mehrere Sockets auf den gleichen SMTP-Server connecten, dann besteht doch die Gefahr, dass er wegen zu vieler gleicher Verbindungen abblockt. Und dabei evtl. auch die IP erstmal sperrt.

Das Problem ist nicht das abblocken, sondern auslesen der Fehlermeldungen. Manche antworten mit Beschreibung des Problems, andere sagen einfach nur Fehler. Woher weiß ich sicher, ob ich bei nem 421 geblockt wurde oder einfach nur zu viele Connections offen sind?
Mit Zitat antworten
  #12 (permalink)  
Alt 29-05-2010, 09:14
Piremilok
 Registrierter Benutzer
Links : Onlinestatus : Piremilok ist offline
Registriert seit: Jul 2006
Beiträge: 95
Piremilok ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@onemorenerd: parallelisieren? Ich dachte immer PHP ist eher imperativ mit Ansätzen von OOP.
Wie kann ich denn nebenläufiges Verhalten realisieren ohne das Script mehrfach gleichzeitig auszuführen?


Edit: Sofern das nur über Process Control geht, ist es zwar interessant, aber wird von meinem Hoster nicht unterstützt. Und dass er die PHP-Version für mich extra kompiliert glaube ich nicht. Leider...

Geändert von Piremilok (29-05-2010 um 10:05 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 29-05-2010, 11:02
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

ich glaube, onemorenerd meinte nur die Verbindungen. In der Zeit, wo du auf die Daten der einen Verbindung wartest, kannst du die einer anderen bereits verarbeiten. Dafür gibt es solche Funktionen wie socket_select oder stream_select.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #14 (permalink)  
Alt 29-05-2010, 21:57
Piremilok
 Registrierter Benutzer
Links : Onlinestatus : Piremilok ist offline
Registriert seit: Jul 2006
Beiträge: 95
Piremilok ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

vielen Dank für die Antwort.
Das Thema klingt wirklich interessant und bin gerade dabei mich einzulesen, scheint aber nicht ganz einfach zu sein ;-)

Nochmals vielen Dank für eure Hilfe.

gruß
Piremilok
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mails versenden floriankf PHP Developer Forum 5 11-08-2006 13:55
mail script direkt über smtp account monaco05 PHP Developer Forum 5 01-09-2005 18:25
Mails versenden tmaniacr PHP Developer Forum 9 12-04-2005 12:05
e-mails mit php vom Server des Providers aus direkt verschicken? Annette R. PHP Developer Forum 1 13-08-2003 19:24
Mail Script mit SMTP versenden? php4fun_de PHP Developer Forum 2 08-05-2002 20:26

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:08 Uhr.