# SMTP über PHP. Timing Fehler?



## won_gak (10. Februar 2004)

Hallo an alle.

Ich habe ein Problem mit dem Mailversand über PHP. Da mir die mail () Funktion zu langsam war (bei jedem Aufruf wird jedes mal ein Socket geöffnet und wieder geschlossen), habe ich selbst ein Socket geöffnet und schicke dann meine Daten an Postfix (v. 2.0.18).

Hier der Code:


```
$_SESSION["socket"] = socket_create (AF_INET, SOCK_STREAM, 0);
if ($_SESSION["socket"] < 0) {
  echo "Konnte keinen Socket erstellen: Grund: " . socket_strerror ($socket) . "<br>";
} else {
  echo "Socket erstellt...<br>";
}
echo "Versuche, eine SMTP-Verbindung zu 'localhost' auf Port '25' aufzubauen ...<br>";
$result = socket_connect ($_SESSION["socket"], "127.0.0.1", "25");
if ($result < 0) {
 echo "socket_connect() fehlgeschlagen.\r\nGrund: ($result) " . socket_strerror($result) . "<br>";
 } else {
  echo "OK.<br>";
}
$out = socket_read ($_SESSION["socket"], 2048);
echo $out . "<br>";
for (MYSQL ZEUGS)
{
  $res = send_mail ($DATEN);
  if (!is_array ($res) )
  {
    $error++;
    echo "<p class='error'>Fehler beim Versand an: $email!</p>" . $res;
    $in = "RSET  \r\n";
    socket_write ($_SESSION["socket"], $in, strlen ($in));
    $out = socket_read ($_SESSION["socket"], 2048);
    echo $out;
  } else {
    $true++;
  }
}
```
Und jetzt die Funktion send_mail ($daten), die mir wahlweise ein HTML oder Text oder PDF generiert.

```
$in = "MAIL FROM: <$from_email>\r\n";

socket_write ($_SESSION["socket"], $in, strlen ($in));
$out = socket_read ($_SESSION["socket"], 2048);
if (substr ($out, 0, 3) != "250")
{
  return "$out<br>Fehler bei MAIL FROM:";
}
$in = "RCPT TO: <$to_email>\r\n";
socket_write ($_SESSION["socket"], $in, strlen ($in));
$out = socket_read ($_SESSION["socket"], 2048);
if (substr ($out, 0, 3) != "250")
{
  return "$out<br>Fehler bei RCPT TO:";
}
$in = "DATA\r\n";
socket_write ($_SESSION["socket"], $in, strlen ($in));
$out = socket_read ($_SESSION["socket"], 2048);
if (substr ($out, 0, 3) != "354")
{
  return "$out<br>Fehler bei DATA:";
}
$in = "To: <" . $to_email . ">\r\nSubject: " . $subject . "\r\n" . $headers . $message . "\r\n.\r\n";
socket_write ($_SESSION["socket"], $in, strlen ($in));
$out = socket_read ($_SESSION["socket"], 2048);
return array ($mail);
```

Was passiert (habe ich in den Logs überprüft): Alles klappt wunderbar, die Mails gehen raus, bis es zu einem Delay kommt. Anscheinend stimmt dann das Timing nicht mehr, PHP schickt die nächsten Daten, währen Postfix noch wartet. Postfix kann die Anfrage nicht interpretieren ("Command not implemented"). NIx geht mehr.

Ich verzweifle bald. Ich denke, dass es sich um ein Postfix Config Problem handelt, deshalb habe ich das hier gepostet, obwohl es auch um PHP geht.

Danke schon mal im voraus für die Hilfe


----------



## won_gak (16. Februar 2004)

Toll,

diesmal hat das Mailing problemlos geklappt.
ARRRGHHH. Ich habe nichts an der Postfix Config geändert. Nichts am Code. Ich glaube ich geh mal ein wenig weinen.

Vielleicht war ja mqueue ein wenig blockiert.


----------

