aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2011-09-26 14:07:54 +0100
committerDaniel Stenberg <daniel@haxx.se>2011-09-29 23:15:46 +0200
commit7f304ab84f560c9ddcd3ed1887bb4aa99a90bd6a (patch)
tree9a46f62ffa40901550effaf6f14a5e025f21159d /lib
parente709cc8627ef3e0a8b00362f7d85ea71024b944d (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.c26
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;
}