diff options
Diffstat (limited to 'win32/sendmail.c')
-rw-r--r-- | win32/sendmail.c | 63 |
1 files changed, 56 insertions, 7 deletions
diff --git a/win32/sendmail.c b/win32/sendmail.c index 4ef759ec20..721dd57843 100644 --- a/win32/sendmail.c +++ b/win32/sendmail.c @@ -191,7 +191,8 @@ static char *php_win32_mail_trim_header(char *header TSRMLS_DC) // See SendText() for additional args! //********************************************************************/ int TSendMail(char *host, int *error, char **error_message, - char *headers, char *Subject, char *mailTo, char *data) + char *headers, char *Subject, char *mailTo, char *data, + char *mailCc, char *mailBcc, char *mailRPath) { int ret; char *RPath = NULL; @@ -233,7 +234,10 @@ int TSendMail(char *host, int *error, char **error_message, } /* Fall back to sendmail_from php.ini setting */ - if (INI_STR("sendmail_from")) { + if (mailRPath && *mailRPath) { + RPath = estrdup(mailRPath); + } + else if (INI_STR("sendmail_from")) { RPath = estrdup(INI_STR("sendmail_from")); } else { if (headers) { @@ -264,7 +268,7 @@ int TSendMail(char *host, int *error, char **error_message, MailHost, !INI_INT("smtp_port") ? 25 : INI_INT("smtp_port")); return FAILURE; } else { - ret = SendText(RPath, Subject, mailTo, data, headers, headers_lc, error_message); + ret = SendText(RPath, Subject, mailTo, mailCc, mailBcc, data, headers, headers_lc, error_message); TSMClose(); if (RPath) { efree(RPath); @@ -341,7 +345,8 @@ char *GetSMErrorText(int index) // Author/Date: jcar 20/9/96 // History: //*******************************************************************/ -int SendText(char *RPath, char *Subject, char *mailTo, char *data, char *headers, char *headers_lc, char **error_message) +int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char *mailBcc, char *data, + char *headers, char *headers_lc, char **error_message) { int res, i; char *p; @@ -426,11 +431,35 @@ int SendText(char *RPath, char *Subject, char *mailTo, char *data, char *headers token = strtok(tempMailTo, ","); while(token != NULL) { - sprintf(Buffer, "RCPT TO:<%s>\r\n", token); - if ((res = Post(Buffer)) != SUCCESS) + snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); + if ((res = Post(Buffer)) != SUCCESS) { + efree(tempMailTo); return (res); + } if ((res = Ack(&server_response)) != SUCCESS) { SMTP_ERROR_RESPONSE(server_response); + efree(tempMailTo); + return (res); + } + token = strtok(NULL, ","); + } + efree(tempMailTo); + } + + if (mailCc && *mailCc) { + tempMailTo = estrdup(mailCc); + /* Send mail to all rcpt's */ + token = strtok(tempMailTo, ","); + while(token != NULL) + { + snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); + if ((res = Post(Buffer)) != SUCCESS) { + efree(tempMailTo); + return (res); + } + if ((res = Ack(&server_response)) != SUCCESS) { + SMTP_ERROR_RESPONSE(server_response); + efree(tempMailTo); return (res); } token = strtok(NULL, ","); @@ -498,6 +527,26 @@ int SendText(char *RPath, char *Subject, char *mailTo, char *data, char *headers } } } + if (mailBcc && *mailBcc) { + tempMailTo = estrdup(mailBcc); + /* Send mail to all rcpt's */ + token = strtok(tempMailTo, ","); + while(token != NULL) + { + snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); + if ((res = Post(Buffer)) != SUCCESS) { + efree(tempMailTo); + return (res); + } + if ((res = Ack(&server_response)) != SUCCESS) { + SMTP_ERROR_RESPONSE(server_response); + efree(tempMailTo); + return (res); + } + token = strtok(NULL, ","); + } + efree(tempMailTo); + } if ((res = Post("DATA\r\n")) != SUCCESS) { efree(stripped_header); @@ -646,7 +695,7 @@ int PostHeader(char *RPath, char *Subject, char *mailTo, char *xheaders, char *m } } if(xheaders){ - if (!addToHeader(&header_buffer, "%s\r\n", xheaders)) { + if (!addToHeader(&header_buffer, "%s", xheaders)) { goto PostHeader_outofmem; } } |