[Comm] помогите наладить модемную почту

Alexey Morozov =?iso-8859-1?q?alex-altlinux_=CE=C1_idisys=2Eiae=2Ensk=2Esu?=
Пт Дек 5 14:05:26 MSK 2003


On Fri, Dec 05, 2003 at 01:04:11AM +0600, Alexey Morozov wrote:
> Поэтому, собственно, я и хочу добиться требуемой мне функциональности от
> msmtp + что-нибудь. В msmtp, на самом деле, подправить нужно не так много.
> Нужно, собственно, разделять коды ошибок на фатальные и нет.
Патч в аттачменте. Проверять еще не проверял, но "должно работать" (TM)
:-))


----------- следующая часть -----------
diff -urN msmtp-0.6.2.orig/src/esmtp.c msmtp-0.6.2/src/esmtp.c
--- msmtp-0.6.2.orig/src/esmtp.c	2003-11-14 00:06:10 +0600
+++ msmtp-0.6.2/src/esmtp.c	2003-12-05 14:26:35 +0600
@@ -862,7 +862,7 @@
     if ((fd = open_socket(server, port)) < 0)
     {
 	add_error_line("cannot connect to SMTP server");
-	error_code = EX_UNAVAILABLE;
+	error_code = EX_TEMPFAIL;
 	goto exit;
     }
     /* start TLS encryption for TLS-only servers (no STARTTLS) if wanted */
@@ -879,7 +879,7 @@
     if (smtp_get_response(fd, &tls, 220) != 220)
     {
 	add_error_line("cannot get initial ok message from SMTP server");
-	error_code = EX_UNAVAILABLE;
+	error_code = EX_TEMPFAIL;
 	goto close_exit;
     }
     /* start smtp session */
@@ -919,11 +919,29 @@
 	error_code = EX_IOERR;
 	goto close_exit;
     }
-    if (smtp_get_response(fd, &tls, 250) != 250)
+    if ((error_code = smtp_get_response(fd, &tls, 250)) != 250)
     {
 	add_error_line("line `MAIL FROM:<%s>' not accepted by SMTP server", 
 		from);
-	error_code = EX_DATAERR;
+	switch (error_code) {
+	case 451:
+	case 452:
+		error_code = EX_TEMPFAIL;
+		break;
+	case 503:
+		error_code = EX_SOFTWARE;
+		break;
+	case 550:
+		error_code = EX_NOPERM;
+		break;
+	case 552:
+	case 553:
+		error_code = EX_UNAVAILABLE;
+		break;
+	default:
+		error_code = EX_PROTOCOL;
+		break;
+	}
 	goto close_exit;
     }
     for (i = 0; i < rcptc; i++)
@@ -933,11 +951,35 @@
 	    error_code = EX_IOERR;
 	    goto close_exit;
 	}
-	if (smtp_get_response(fd, &tls, 250) != 250)
+	if ((error_code = smtp_get_response(fd, &tls, 250)) != 250)
 	{
+	    switch (error_code) {
+	    case 251: // not actually an error
+		continue;
+	    case 450:
+	    case 451:
+	    case 452:
+		error_code = EX_TEMPFAIL;
+		break;
+	    case 503:
+		error_code = EX_SOFTWARE;
+		break;
+	    case 550:
+		error_code = EX_NOPERM;
+		break;
+	    case 551:
+		error_code = EX_NOUSER;
+		break;
+	    case 552:
+	    case 553:
+		error_code = EX_UNAVAILABLE;
+		break;
+	    default:
+		error_code = EX_PROTOCOL;
+		break;
+	    }
 	    add_error_line("line `RCPT TO:<%s>' not accepted by SMTP server", 
 		    rcptv[i]);
-	    error_code = EX_DATAERR;
 	    goto close_exit;
 	}
     }
@@ -947,10 +989,23 @@
 	error_code = EX_IOERR;
 	goto close_exit;
     }
-    if (smtp_get_response(fd, &tls, 354) != 354)
+    if ((error_code = smtp_get_response(fd, &tls, 354)) != 354)
     {
+	switch (error_code) {
+	case 451:
+	    error_code = EX_TEMPFAIL;
+	    break;
+	case 503:
+	    error_code = EX_SOFTWARE;
+	    break;
+	case 554:
+	    error_code = EX_DATAERR;
+	    break;
+	default:
+	    error_code = EX_PROTOCOL;
+	    break;
+	}
 	add_error_line("SMTP server does not accept the mail");
-	error_code = EX_DATAERR;
 	goto close_exit;
     }
     /* Copy the mail from mailf to fd, converting '\n' to '\r\n' and a leading
@@ -1029,10 +1084,24 @@
 	error_code = EX_IOERR;
 	goto close_exit;
     }
-    if (smtp_get_response(fd, &tls, 250) != 250)
+    if ((error_code = smtp_get_response(fd, &tls, 250)) != 250)
     {
+	switch (error_code) {
+	case 451:
+	case 452:
+	    error_code = EX_TEMPFAIL;
+	    break;
+	case 552:
+	    error_code = EX_UNAVAILABLE;
+	    break;
+	case 554:
+	    error_code = EX_DATAERR;
+	    break;
+	default:
+	    error_code = EX_PROTOCOL;
+	    break;
+	}
 	add_error_line("SMTP server did not accept the mail");
-	error_code = EX_DATAERR;
 	goto close_exit;
     }
     
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/community/attachments/20031205/c8548b14/attachment-0002.bin>


Подробная информация о списке рассылки community