aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/smtp.c7
-rw-r--r--lib/smtp.h2
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/smtp.c b/lib/smtp.c
index 81c069f7d..b73bb2d89 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -232,6 +232,11 @@ static int smtp_endofresp(struct pingpong *pp, int *resp)
line += 4;
len -= 4;
+ if(smtpc->state == SMTP_EHLO && len >= 4 && !memcmp(line, "SIZE", 4)) {
+ DEBUGF(infof(conn->data, "Server supports SIZE extension.\n"));
+ smtpc->size_supported = true;
+ }
+
if(smtpc->state == SMTP_EHLO && len >= 5 && !memcmp(line, "AUTH ", 5)) {
line += 5;
len -= 5;
@@ -943,7 +948,7 @@ static CURLcode smtp_mail(struct connectdata *conn)
}
/* calculate the optional SIZE parameter */
- if(conn->data->set.infilesize > 0) {
+ if(conn->proto.smtpc.size_supported && conn->data->set.infilesize > 0) {
size = aprintf("%" FORMAT_OFF_T, data->set.infilesize);
if(!size) {
diff --git a/lib/smtp.h b/lib/smtp.h
index 38fd1b70a..d68a659b5 100644
--- a/lib/smtp.h
+++ b/lib/smtp.h
@@ -66,6 +66,8 @@ struct smtp_conn {
struct curl_slist *rcpt; /* Recipient list */
bool ssldone; /* Is connect() over SSL done? only relevant in
multi mode */
+ bool size_supported; /* If server supports SIZE extension according to
+ RFC 1870 */
};
extern const struct Curl_handler Curl_handler_smtp;