From: Steve Holme Date: Mon, 26 Sep 2011 13:07:54 +0000 (+0100) Subject: smtp_mail: Added support to MAIL FROM for the optional SIZE parameter X-Git-Tag: upstream/7.37.1~3635 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7f304ab84f560c9ddcd3ed1887bb4aa99a90bd6a;p=platform%2Fupstream%2Fcurl.git smtp_mail: Added support to MAIL FROM for the optional SIZE parameter The size of the email can now be set via CURLOPT_INFILESIZE. This allows the email to be rejected by the server, if supported, and the maximum size has been configured on the server. --- diff --git a/lib/smtp.c b/lib/smtp.c index bf48e28..68b05f2 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -787,24 +787,36 @@ static CURLcode smtp_state_auth_resp(struct connectdata *conn, /* start the DO phase */ static CURLcode smtp_mail(struct connectdata *conn) { + char *from = NULL; + char *size = NULL; CURLcode result = CURLE_OK; struct SessionHandle *data = conn->data; - /* send MAIL FROM */ + /* calculate the FROM parameter */ if(!data->set.str[STRING_MAIL_FROM]) /* null reverse-path, RFC-2821, sect. 3.7 */ - result = Curl_pp_sendf(&conn->proto.smtpc.pp, "MAIL FROM:<>"); - + from = "<>"; else if(data->set.str[STRING_MAIL_FROM][0] == '<') - result = Curl_pp_sendf(&conn->proto.smtpc.pp, "MAIL FROM:%s", - data->set.str[STRING_MAIL_FROM]); + from = aprintf("%s", data->set.str[STRING_MAIL_FROM]); + else + from = aprintf("<%s>", data->set.str[STRING_MAIL_FROM]); + + /* calculate the optional SIZE parameter */ + if(conn->data->set.infilesize > 0) + size = aprintf("%" FORMAT_OFF_T, data->set.infilesize); + + /* send MAIL FROM */ + if(size == NULL) + result = Curl_pp_sendf(&conn->proto.smtpc.pp, "MAIL FROM:%s", from); else - result = Curl_pp_sendf(&conn->proto.smtpc.pp, "MAIL FROM:<%s>", - data->set.str[STRING_MAIL_FROM]); + result = Curl_pp_sendf(&conn->proto.smtpc.pp, "MAIL FROM:%s SIZE=%s", + from, size); + if(result) return result; state(conn, SMTP_MAIL); + return result; }