Seite 1 von 1

E-Mail Bugs eingegrenzt, betrifft u.a. SMTP Fehler 503

Verfasst: 22.07.2006 07:06
von jleinenbach
Betrifft u. a. den Fehler 503 valid RCPT command must precede DATA

Bugs in include/smtp.php:

Im SMTP Protokoll ist die Angabe von RCPT TO: zwingend notwendig.
Wird in der smtp.php in der folgenden Funktion:

Code: Alles auswählen

function smtpmail($mail_to, $subject, $message, $headers = '')
eine leere Variable "$mail_to" übergeben, dann wird durch die folgende Zeile:

Code: Alles auswählen

$mail_to = (trim($mail_to) == '') ? 'Undisclosed-recipients:;' : trim($mail_to);
die Variable auf $mail_to = ''Undisclosed-recipients:;' gesetzt. Dies ist allerdings keine gültige E-Mail-Adresse. So, wie das programmiert ist, führt dies zwangsläufig dazu, dass kein RCPT TO: gesetzt wird, falls niemand auf die Idee kam, zusätzlich im Header BCC: oder CC: zu setzen.

Weiteres Problem: Auf TO: wird der übergebene Header im Gegensatz zu BCC: und CC: überhaupt nicht geprüft!

Aufmerksam wurde ich auf den Fehler durch die Option:

"Account-Freischaltung aktivieren", die ich auf "Durch den Admin" gesetzt hatte.

Der Board-Admin wird nicht benachrichtigt - und das verursacht den Fehler 503. Der User erhält dennoch seine Begrüßung.

Die Variable $mail_to wird nun offenbar leer übergeben, der Empfänger ist zwar im Header enthalten, wird aber ignoriert.

Da nun aber die Funktion smtpmail eben nicht auf "TO:" im Header überprüft, gibt es keinen RCPT TO: - und die Mailserver beschweren sich nur im günstigsten Fall.

Dass hier bei der Programmierung grundsätzlich etwas schiefgelaufen ist, sieht man an der nie verwendeten Variablen $to_header. Der ganze Abschnitt zur header-Behandlung muss neu geschrieben werden. Vielleicht setze ich mich da mal die nächste Tage mal dran.

Weitere Bugs:

Da es nun nicht der Sinn sein kann, die Fehler, die durch einen fehlerhaften Aufruf in der aufgerufenen Funktion zu beheben, ist der Fehler zudem an anderer Stelle zu suchen:

Es sollte eigentlich nie vorkommen, ein TO: im Header zu setzen, ohne gleichzeitig die Variable $mail_to zu übergeben. Aus dem gleichen Grund tritt dieser Fehler auch ohne Verwendung eines SMTP-Servers auf.

Im Quelltext habe ich mir das aber noch nicht angesehen.


Gruß
Jens Leinenbach

Verfasst: 23.07.2006 02:47
von Feanor
Dass hier bei der Programmierung grundsätzlich etwas schiefgelaufen ist, sieht man an der nie verwendeten Variablen $to_header. Der ganze Abschnitt zur header-Behandlung muss neu geschrieben werden. Vielleicht setze ich mich da mal die nächste Tage mal dran.
Das wäre nett, wenn du dich darum kümmern würdest. Ich hab's noch nicht gebacken bekommen meinen fast 3000 Mitgliedern einen Newsletter zu schicken über das ACP.

Verfasst: 23.07.2006 13:29
von Dennis63
phpbb.de ist die deutsche Supportseite.


Bugmeldungen bitte an die Hersteller des phpBB's melden:

http://www.phpbb.com/bugs/


Grüße
Dennis

Verfasst: 24.07.2006 03:05
von jleinenbach
@ Dennis: Ich habe das jetzt mal in den Bugtracker eingegeben. Danke für den Hinweis. Meine umprogrammierte smtp.php konnte ich dort leider nicht gleich hochladen, habe dafür aber meine E-Mail-Adresse angegeben.

@ Feanor: Ob die Änderung Probleme beim Massenversand behebt, kann ich dir leider nicht sagen. Habe dir aber eine pm geschickt, falls du die Datei testen willst.

Falls überhaupt kein Empfänger ermittelt werden konnte (auch nicht über "to" im Header), so lasse ich an die board email-Adresse eine Fehlermeldung mit der nicht zustellbaren Mail verschicken. Falls auch die Board-E-Mail-Adresse nicht konfiguriert sein sollte, wird jetzt eine spezifische Fehlermeldung ausgegeben, statt die Fehlerbehandlung dem Mailserver zu überlassen.


Schönen Gruß
Jens Leinenbach

Verfasst: 12.11.2006 21:26
von Martin Truckenbrodt
Hallo,
was ist denn aus der Sache geworden?

Ich kämpfe auch gerade mit einer Meldung
503 bad sequence of commands
. Diese kommt, wenn ich folgendes laufen lasse:

Code: Alles auswählen

				$sql = "SELECT user_email, user_lang 
					FROM " . USERS_TABLE . "
					WHERE user_level = " . ADMIN;
				
				if ( !($result = $db->sql_query($sql)) )
				{
					message_die(GENERAL_ERROR, 'Could not select Administrators', '', __LINE__, __FILE__, $sql);
				}
				
				while ($row = $db->sql_fetchrow($result))
				{
					$emailer->from($board_config['board_email']);
					$emailer->replyto($board_config['board_email']);
					$emailer->email_address(trim($row['user_email']));
					$emailer->use_template('user_activate_passwd_webmaster', $row['user_lang']);
					$emailer->set_subject($lang['New_password_activation']);
					$emailer->assign_vars(array(
						'SITENAME' => $board_config['sitename'], 
						'USERNAME' => $username,
						'PASSWORD' => $user_password,
						'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '', 
						'U_ACTIVATE' => $server_url . '?mode=activate&' . POST_USERS_URL . '=' . $user_id . '&act_key=' . $user_actkey
					));
					$emailer->send();
					$emailer->reset();
				}
				$db->sql_freeresult($result);
Danke und Gruß Martin

Verfasst: 12.11.2006 22:33
von Martin Truckenbrodt
Hallo,
ich habe mein Problem gelöst.
Der open gepostete Code ist i.O.
Im Anschluß an die Mails an die Administratoren wird noch eine Mail an den Benutzer verschickt. Hier gab es eine Überschneidung mit den Variablennamen. :oops:

Gruß Martin