[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