Files
deskhub/DeskHub-Webseite/tests/fixtures/smtp_server.php
T
2026-10-28 07:54:52 +00:00

28 lines
1.2 KiB
PHP

<?php
// Minimaler SMTP-Server für Tests: php smtp_server.php <port> <logdatei>. Nimmt jede Mail an und schreibt "MAIL <empfänger>" ins Log.
$port = (int) ($argv[1] ?? 0);
$log = (string) ($argv[2] ?? '');
$srv = stream_socket_server("tcp://127.0.0.1:$port", $errno, $errstr);
if (!$srv) { fwrite(STDERR, "Server nicht gestartet: $errstr\n"); exit(1); }
file_put_contents($log, "READY\n", FILE_APPEND);
while ($c = @stream_socket_accept($srv, 120)) {
stream_set_timeout($c, 10);
fwrite($c, "220 test ESMTP\r\n");
$to = '';
$data = false;
while (($line = fgets($c)) !== false) {
$l = rtrim($line, "\r\n");
if ($data) {
if ($l === '.') { $data = false; file_put_contents($log, "MAIL $to\n", FILE_APPEND); fwrite($c, "250 queued\r\n"); }
continue;
}
$u = strtoupper($l);
if (str_starts_with($u, 'EHLO')) fwrite($c, "250 test\r\n");
elseif (str_starts_with($u, 'RCPT TO:')) { $to = trim(substr($l, 8), ' <>'); fwrite($c, "250 ok\r\n"); }
elseif ($u === 'DATA') { $data = true; fwrite($c, "354 go\r\n"); }
elseif ($u === 'QUIT') { fwrite($c, "221 bye\r\n"); break; }
else fwrite($c, "250 ok\r\n");
}
fclose($c);
}