X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=blobdiff_plain;f=src%2Fcommon%2Fsmtp.c;h=346c63e5f4eae85ffcb431e99fc3023b00976fcc;hp=104d168fbe8a7e84aaf80ee53f8625590c6ea913;hb=f69d8e55a0a3b1bf0075ea7bd7806b00e676153d;hpb=4e2eb90d5956c5ec52bef09e8a9cd74edd81adf2 diff --git a/src/common/smtp.c b/src/common/smtp.c index 104d168fb..346c63e5f 100644 --- a/src/common/smtp.c +++ b/src/common/smtp.c @@ -119,18 +119,29 @@ static void smtp_session_destroy(Session *session) static gint smtp_from(SMTPSession *session) { gchar buf[MSGBUFSIZE]; + gchar *mail_size = NULL; g_return_val_if_fail(session->from != NULL, SM_ERROR); session->state = SMTP_FROM; + + if (session->is_esmtp) + mail_size = g_strdup_printf(" SIZE=%d", session->send_data_len); + else + mail_size = g_strdup(""); + if (strchr(session->from, '<')) - g_snprintf(buf, sizeof(buf), "MAIL FROM:%s", session->from); + g_snprintf(buf, sizeof(buf), "MAIL FROM:%s%s", session->from, + mail_size); else - g_snprintf(buf, sizeof(buf), "MAIL FROM:<%s>", session->from); + g_snprintf(buf, sizeof(buf), "MAIL FROM:<%s>%s", session->from, + mail_size); + + g_free(mail_size); session_send_msg(SESSION(session), SESSION_MSG_NORMAL, buf); - log_print("SMTP> %s\n", buf); + log_print("%sSMTP> %s\n", (session->is_esmtp?"E":""), buf); return SM_OK; } @@ -481,11 +492,14 @@ static gint smtp_session_recv_msg(Session *session, const gchar *msg) switch (smtp_session->state) { case SMTP_READY: + if (strstr(msg, "ESMTP")) + smtp_session->is_esmtp = TRUE; case SMTP_CONNECTED: #if USE_OPENSSL - if (smtp_session->user || session->ssl_type != SSL_NONE) + if (smtp_session->user || session->ssl_type != SSL_NONE || + smtp_session->is_esmtp) #else - if (smtp_session->user) + if (smtp_session->user || smtp_session->is_esmtp) #endif smtp_ehlo(smtp_session); else