diff options
author | Steve Holme <steve_holme@hotmail.com> | 2011-09-26 14:07:54 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2011-09-29 23:15:46 +0200 |
commit | 7f304ab84f560c9ddcd3ed1887bb4aa99a90bd6a (patch) | |
tree | 9a46f62ffa40901550effaf6f14a5e025f21159d /lib | |
parent | e709cc8627ef3e0a8b00362f7d85ea71024b944d (diff) |
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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/smtp.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/lib/smtp.c b/lib/smtp.c index bf48e288b..68b05f208 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; } |