diff options
author | Frank M. Kromann <fmk@php.net> | 2002-07-02 23:45:32 +0000 |
---|---|---|
committer | Frank M. Kromann <fmk@php.net> | 2002-07-02 23:45:32 +0000 |
commit | d305126002947a9ff217b20dfad75b563f36c5c5 (patch) | |
tree | a4426749062330037a2b9382bc9614f045fe57df /ext/imap/php_imap.c | |
parent | e2c5462d9147c7552ff922bf93e180c8a5b6a487 (diff) | |
download | php-git-d305126002947a9ff217b20dfad75b563f36c5c5.tar.gz |
Make sure To addresses are parsed correct with RFC822.
Diffstat (limited to 'ext/imap/php_imap.c')
-rw-r--r-- | ext/imap/php_imap.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index aab668654a..abb15253d5 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -3253,10 +3253,29 @@ int _php_imap_mail(char *to, char *subject, char *message, char *headers, char * #ifdef PHP_WIN32 char *tempMailTo; + char *tsm_errmsg = NULL; ADDRESS *addr; - char *bufferCc = NULL, *bufferBcc = NULL; + char *bufferTo = NULL, *bufferCc = NULL, *bufferBcc = NULL; int offset; + if (to && *to) { + tempMailTo = estrdup(to); + bufferTo = (char *)emalloc(strlen(to)); + offset = 0; + addr = NULL; + rfc822_parse_adrlist(&addr, tempMailTo, NULL); + while (addr) { + if (strcmp(addr->host, ERRHOST) == 0) + return (BAD_MSG_DESTINATION); + else { + offset += sprintf(bufferTo + offset, "%s@%s,", addr->mailbox, addr->host); + } + addr = addr->next; + } + efree(tempMailTo); + bufferTo[offset] = 0; + } + if (cc && *cc) { tempMailTo = estrdup(cc); bufferCc = (char *)emalloc(strlen(cc)); @@ -3294,8 +3313,13 @@ int _php_imap_mail(char *to, char *subject, char *message, char *headers, char * } - if (TSendMail(INI_STR("SMTP"), &tsm_err, NULL, headers, subject, to, message, bufferCc, bufferBcc, rpath) != SUCCESS) { - php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), GetSMErrorText(tsm_err)); + if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, headers, subject, bufferTo, message, bufferCc, bufferBcc, rpath) != SUCCESS) { + if (tsm_errmsg) { + php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), tsm_errmsg); + efree(tsm_errmsg); + } else { + php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), GetSMErrorText(tsm_err)); + } return 0; } if (bufferCc) efree(bufferCc); |