[Dovecot] 2.0.7 (0757f4f5b882): LMTP Server refuses queued mail

Stan Hoeppner stan at hardwarefreak.com
Sun Nov 28 10:01:34 EET 2010


Thomas Leuxner put forth on 11/27/2010 11:56 PM:
> Am 27.11.2010 um 20:44 schrieb Timo Sirainen:
> 
>> Nothing in Dovecot's log? Typically this should log an error.
> 
> Nov 28 06:49:23 spectre postfix/qmgr[6175]: 4608E408C: from=<vzmaild at ft-ms-l1.serverloft.de>, size=307431, nrcpt=1 (queue active)
> Nov 28 06:49:23 spectre postfix/lmtp[18445]: 4608E408C: to=<tlx at leuxner.net>, relay=spectre.leuxner.net[private/dovecot-lmtp], delay=2360, delays=2360/0.01/0/0.01, dsn=4.3.0, status=deferred (host spectre.leuxner.net[private/dovecot-lmtp] said: 451 4.3.0 Temporary internal failure (in reply to end of DATA command))
> 
> Another mail stuck. Just a hunch: Mails over 128k cause trouble…

http://www.dovecot.org/list/dovecot-cvs/2009-April/013190.html

Below, I believe, is the code generating the error.  And it seems you're
absolutely right about the 128KB issue.  It seems the lmtpd is trying to
append the mail to "/tmp/dovecot.lmtp." if the email is greater than
128KB.  Is it possible the permissions you have on /tmp aren't
compatible with lmtpd?


 static void client_input_data_handle(struct client *client)
@@ -353,7 +407,11 @@ static void client_input_data_handle(str
 			}
 		} else if (client->state.data_end_idx == DATA_DOT_NEXT_POS) {
 			/* saw a dot at the beginning of line. drop it. */
-			client_input_add(client, data, i-1);
+			if (client_input_add(client, data, i-1) < 0) {
+				client_destroy(client, "451 4.3.0",
+					       "Temporary internal failure");
+				return;
+			}
 			start = i;
 			client->state.data_end_idx = 0;
 		} else {
@@ -366,7 +424,11 @@ static void client_input_data_handle(str
 		rewind = client->state.data_end_idx - DATA_DOT_NEXT_POS + 1;
 		i -= rewind; size -= rewind;
 	}
-	client_input_add(client, data + start, i-start);
+	if (client_input_add(client, data + start, i-start) < 0) {
+		client_destroy(client, "451 4.3.0",
+			       "Temporary internal failure");
+		return;
+	}
 	i_stream_skip(client->input, skip == 0 ? i : skip);

 	if (i < size) {

-- 
Stan


More information about the dovecot mailing list