Hi all,

as a follow-up to the discussion regarding transient SMTP errors, attached is a 
patch which adjusts all SMTP client transaction timeouts to the minimum values 
(which are *very* long imho!) required by RFC 5321, sect. 4.5.3.2.1. - 
4.5.3.2.6.

Cheers,
Albrecht.
diff --git a/libnetclient/net-client-smtp.c b/libnetclient/net-client-smtp.c
index 80ed064..5eb8355 100644
--- a/libnetclient/net-client-smtp.c
+++ b/libnetclient/net-client-smtp.c
@@ -124,6 +124,7 @@ net_client_smtp_connect(NetClientSmtp *client, gchar **greeting, GError **error)
 
 	/* get the greeting */
 	if (result) {
+		net_client_set_timeout(NET_CLIENT(client), 5U * 60U);	/* RFC 5321, Sect. 4.5.3.2.1.: 5 minutes timeout */
 		result = net_client_smtp_read_reply(client, 220, greeting, error);
 	}
 
@@ -190,6 +191,7 @@ net_client_smtp_send_msg(NetClientSmtp *client, const NetClientSmtpMessage *mess
 		(message->recipients != NULL) && (message->data_callback != NULL), FALSE);
 
 	/* set the RFC 5321 sender and recipient(s) */
+	net_client_set_timeout(NET_CLIENT(client), 5U * 60U);	/* RFC 5321, Sect. 4.5.3.2.2., 4.5.3.2.3.: 5 minutes timeout */
 	if (client->priv->can_dsn && message->have_dsn_rcpt) {
 		if (message->dsn_envid != NULL) {
 			result = net_client_smtp_execute(client, "MAIL FROM:<%s> RET=%s ENVID=%s", NULL, error, message->sender,
@@ -215,6 +217,7 @@ net_client_smtp_send_msg(NetClientSmtp *client, const NetClientSmtpMessage *mess
 
 	/* initialise sending the message data */
 	if (result) {
+		net_client_set_timeout(NET_CLIENT(client), 2U * 60U);	/* RFC 5321, Sect. 4.5.3.2.4.: 2 minutes timeout */
 		result = net_client_smtp_execute(client, "DATA", NULL, error);
 	}
 
@@ -224,6 +227,7 @@ net_client_smtp_send_msg(NetClientSmtp *client, const NetClientSmtpMessage *mess
 		gssize count;
 		gchar last_char = '\0';
 
+		net_client_set_timeout(NET_CLIENT(client), 3U * 60U);	/* RFC 5321, Sect. 4.5.3.2.5.: 3 minutes timeout */
 		client->priv->data_state = TRUE;
 		do {
 			count = message->data_callback(buffer, SMTP_DATA_BUF_SIZE, message->user_data, error);
@@ -244,6 +248,7 @@ net_client_smtp_send_msg(NetClientSmtp *client, const NetClientSmtpMessage *mess
 	}
 
 	if (result) {
+		net_client_set_timeout(NET_CLIENT(client), 10U * 60U);	/* RFC 5321, Sect. 4.5.3.2.6.: 10 minutes timeout */
 		result = net_client_smtp_read_reply(client, -1, NULL, error);
 		client->priv->data_state = FALSE;
 	}

Attachment: pgpc118MNUlbD.pgp
Description: PGP signature

_______________________________________________
balsa-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/balsa-list

Reply via email to