won_gak
Erfahrenes Mitglied
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:
Und jetzt die Funktion send_mail ($daten), die mir wahlweise ein HTML oder Text oder PDF generiert.
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
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:
PHP:
$_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++;
}
}
PHP:
$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