--- php-4.2.3/ext/standard/mail.c Thu Nov 28 11:37:12 2002 +++ php-4.2.3-daniel/ext/standard/mail.c Fri Nov 29 01:50:09 2002 @@ -21,6 +21,7 @@ #include <stdlib.h> #include <ctype.h> #include <stdio.h> +#include <string.h> #include "php.h" #include "ext/standard/info.h" #if !defined(PHP_WIN32) @@ -124,6 +125,66 @@ } /* }}} */ +char *get_header(char *header_name, char *headers) +{ + char *tmp; + char *header_value = NULL; + int len=0, i; + + do { + if(*headers == '\n' || *headers == '\0') { + if(len < strlen(header_name)) { + len = 0; + continue; + } + + if((tmp = (char *)malloc(strlen(header_name) + 1)) == NULL) + return NULL; + + /* rewind pointer */ + for(i = 0; i < len; ++i) + --headers; + + /* copy data */ + for(i = 0; i < strlen(header_name); ++i) { + tmp[i] = *headers++; + } + + tmp[i] = '\0'; + + /* compare */ + if(strcasecmp(header_name, tmp) == 0) { + header_value = (char *)malloc(len - +strlen(header_name) - 2 /* colon and space */ + 1); + + *headers++; /* colon */ + *headers++; /* space */ + + for(i = 0; i < len - strlen(header_name) - 2 /* colon +and space */; ++i) { + header_value[i] = *headers++; + } + + header_value[i] = '\0'; + } + else { + /* fast foward pointer :) */ + for(i = strlen(header_name); i < len; ++i) { + headers++; + } + } + + free(tmp); + + len = 0; + } + else { + ++len; + } + } + while(*headers++ && header_value == NULL); + + return header_value; +} + /* {{{ php_mail */ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd) @@ -135,6 +196,7 @@ int ret; char *sendmail_path = INI_STR("sendmail_path"); char *sendmail_cmd = NULL; + char *return_path; if (!sendmail_path) { #ifdef PHP_WIN32 @@ -169,6 +231,21 @@ fprintf(sendmail, "To: %s\n", to); fprintf(sendmail, "Subject: %s\n", subject); if (headers != NULL) { + + if((return_path = get_header("Return-Path", headers)) == NULL) +{ + if((return_path = get_header("From", headers)) != +NULL) { + if(strchr(return_path, '<')) + fprintf(sendmail, "Return-Path: %s\n", +return_path); + else + fprintf(sendmail, "Return-Path: +<%s>\n", return_path); + + free(return_path); + } + } + else { + free(return_path); + } + fprintf(sendmail, "%s\n", headers); } fprintf(sendmail, "\n%s\n", message);
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php