turned CURLOPT_MAIL_RCPT into a curl_slist list instead to support multiple

receivers, and made the command line tool thus support the option specified
many times
This commit is contained in:
Daniel Stenberg 2009-12-31 21:52:01 +00:00
parent 01682cca55
commit 3f3f6be825
4 changed files with 26 additions and 7 deletions

View File

@ -345,8 +345,23 @@ static CURLcode smtp_state_mail_resp(struct connectdata *conn,
} }
else { else {
/* send RCPT TO */ /* send RCPT TO */
result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:%s", struct curl_slist *rcpt;
data->set.str[STRING_MAIL_RCPT]); char *buffer = NULL;
for(rcpt = data->set.mail_rcpt; rcpt; rcpt=rcpt->next) {
char *add = aprintf("%s%s%s", buffer?buffer:"", buffer?", ":"",
rcpt->data);
if(!add) {
free(buffer);
return CURLE_OUT_OF_MEMORY;
}
buffer = add;
}
result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:%s", buffer);
free(buffer);
if(result) if(result)
return result; return result;

View File

@ -2314,8 +2314,8 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
break; break;
case CURLOPT_MAIL_RCPT: case CURLOPT_MAIL_RCPT:
result = setstropt(&data->set.str[STRING_MAIL_RCPT], /* get a list of mail recipients */
va_arg(param, char *)); data->set.mail_rcpt = va_arg(param, struct curl_slist *);
break; break;
default: default:

View File

@ -1166,7 +1166,6 @@ enum dupstring {
STRING_SOCKS5_GSSAPI_SERVICE, /* GSSAPI service name */ STRING_SOCKS5_GSSAPI_SERVICE, /* GSSAPI service name */
#endif #endif
STRING_MAIL_FROM, STRING_MAIL_FROM,
STRING_MAIL_RCPT,
/* -- end of strings -- */ /* -- end of strings -- */
STRING_LAST /* not used, just an end-of-list marker */ STRING_LAST /* not used, just an end-of-list marker */
@ -1337,6 +1336,7 @@ struct UserDefined {
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
long socks5_gssapi_nec; /* flag to support nec socks5 server */ long socks5_gssapi_nec; /* flag to support nec socks5 server */
#endif #endif
struct curl_slist *mail_rcpt; /* linked list of mail recipients */
}; };
struct Names { struct Names {

View File

@ -501,7 +501,7 @@ struct Configurable {
int proxyver; /* set to CURLPROXY_HTTP* define */ int proxyver; /* set to CURLPROXY_HTTP* define */
char *noproxy; char *noproxy;
char *mail_from; char *mail_from;
char *mail_rcpt; struct curl_slist *mail_rcpt;
bool proxytunnel; bool proxytunnel;
bool ftp_append; /* APPE on ftp */ bool ftp_append; /* APPE on ftp */
bool mute; /* shutup */ bool mute; /* shutup */
@ -2279,7 +2279,10 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */
GetStr(&config->mail_from, nextarg); GetStr(&config->mail_from, nextarg);
break; break;
case 'B': /* --mail-rcpt */ case 'B': /* --mail-rcpt */
GetStr(&config->mail_rcpt, nextarg); /* append receiver to a list */
err = add2list(&config->mail_rcpt, nextarg);
if(err)
return err;
break; break;
} }
break; break;
@ -3837,6 +3840,7 @@ static void free_config_fields(struct Configurable *config)
curl_slist_free_all(config->postquote); curl_slist_free_all(config->postquote);
curl_slist_free_all(config->headers); curl_slist_free_all(config->headers);
curl_slist_free_all(config->telnet_options); curl_slist_free_all(config->telnet_options);
curl_slist_free_all(config->mail_rcpt);
if(config->easy) if(config->easy)
curl_easy_cleanup(config->easy); curl_easy_cleanup(config->easy);