Hi. I was wondered why mail() function couldn't use SMTP subroutines. In shared hosting environment where can't be used sendmail binary it is an only way.
I've attached my dirty hack. I hope someone would help me to clean up the patch. -- .''`. Piotr Roszatycki, Netia SA : :' : mailto:[EMAIL PROTECTED] `. `' mailto:[EMAIL PROTECTED] `-
diff -ru php-5.0.3.orig/ext/standard/config.m4 php-5.0.3/ext/standard/config.m4 --- php-5.0.3.orig/ext/standard/config.m4 2004-05-10 09:23:38 +0200 +++ php-5.0.3/ext/standard/config.m4 2005-03-11 22:14:01 +0100 @@ -469,6 +469,7 @@ incomplete_class.c url_scanner_ex.c ftp_fopen_wrapper.c \ http_fopen_wrapper.c php_fopen_wrapper.c credits.c css.c \ var_unserializer.c ftok.c sha1.c user_filters.c uuencode.c \ - filters.c proc_open.c sunfuncs.c streamsfuncs.c http.c) + filters.c proc_open.c sunfuncs.c streamsfuncs.c http.c \ + ../../win32/sendmail.c) PHP_ADD_MAKEFILE_FRAGMENT diff -ru php-5.0.3.orig/ext/standard/mail.c php-5.0.3/ext/standard/mail.c --- php-5.0.3.orig/ext/standard/mail.c 2005-03-11 23:17:23 +0100 +++ php-5.0.3/ext/standard/mail.c 2005-03-11 23:11:12 +0100 @@ -39,9 +39,7 @@ #include "exec.h" #if HAVE_SENDMAIL -#ifdef PHP_WIN32 #include "win32/sendmail.h" -#endif #ifdef NETWARE #include "netware/pipe.h" /* For popen(), pclose() */ @@ -175,17 +173,14 @@ */ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd TSRMLS_DC) { -#if (defined PHP_WIN32 || defined NETWARE) int tsm_err; char *tsm_errmsg = NULL; -#endif FILE *sendmail; int ret; char *sendmail_path = INI_STR("sendmail_path"); char *sendmail_cmd = NULL; - if (!sendmail_path) { -#if (defined PHP_WIN32 || defined NETWARE) + if (!sendmail_path || !sendmail_path[0]) { /* handle old style win smtp sending */ if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, headers, subject, to, message, NULL, NULL, NULL) == FAILURE) { if (tsm_errmsg) { @@ -197,9 +192,6 @@ return 0; } return 1; -#else - return 0; -#endif } if (extra_cmd != NULL) { sendmail_cmd = emalloc (strlen (sendmail_path) + strlen (extra_cmd) + 2); @@ -272,15 +264,11 @@ { char *sendmail_path = INI_STR("sendmail_path"); -#ifdef PHP_WIN32 - if (!sendmail_path) { - php_info_print_table_row(2, "Internal Sendmail Support for Windows", "enabled"); + if (!sendmail_path || !sendmail_path[0]) { + php_info_print_table_row(2, "Internal Sendmail Support", "enabled"); } else { php_info_print_table_row(2, "Path to sendmail", sendmail_path); } -#else - php_info_print_table_row(2, "Path to sendmail", sendmail_path); -#endif } /* }}} */ diff -ru php-5.0.3.orig/win32/sendmail.c php-5.0.3/win32/sendmail.c --- php-5.0.3.orig/win32/sendmail.c 2003-12-08 23:10:42 +0100 +++ php-5.0.3/win32/sendmail.c 2005-03-11 23:01:28 +0100 @@ -22,19 +22,31 @@ #include "php.h" /*php specific */ #include <stdio.h> #include <stdlib.h> -#ifndef NETWARE +#ifdef PHP_WIN32 #include <winsock2.h> -#else /* NETWARE */ +#elifdef NETWARE #include <netware\sendmail_nw.h> -#endif /* NETWARE */ +#endif +#if PHP_WIN32 || NETWARE #include "time.h" +#else +#include <time.h> +#define _timezone __timezone +#include <resolv.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <net/if.h> +#include <netdb.h> +#define INVALID_SOCKET -1 +#endif #include <string.h> #include <math.h> -#ifndef NETWARE +#ifdef PHP_WIN32 #include <malloc.h> #include <memory.h> #include <winbase.h> -#endif /* NETWARE */ +#endif #include "sendmail.h" #include "php_ini.h" @@ -79,12 +91,20 @@ char Buffer[MAIL_BUFFER_SIZE]; /* socket related data */ -SOCKET sc; -#ifndef NETWARE +#if PHP_WIN32 || NETWARE +typedef SOCKET sc; +#else +int sc; +#endif +#ifdef PHP_WIN32 WSADATA Data; struct hostent *adr; #endif /* NETWARE */ +#if PHP_WIN32 || NETWARE SOCKADDR_IN sock_in; +#else +struct sockaddr_in sock_in; +#endif #ifndef NETWARE int WinsockStarted; /* values set by the constructor */ @@ -94,11 +114,7 @@ char LocalHost[HOST_NAME_LEN]; #endif char seps[] = " ,\t\n"; -#ifndef NETWARE -char *php_mailer = "PHP 4 WIN32"; -#else -char *php_mailer = "PHP 4 NetWare"; -#endif /* NETWARE */ +char *php_mailer = "PHP"; char *get_header(char *h, char *headers); @@ -227,7 +243,7 @@ char *headers_lc = NULL; /* headers_lc is only created if we've a header at all */ TSRMLS_FETCH(); -#ifndef NETWARE +#ifdef PHP_WIN32 WinsockStarted = FALSE; #endif @@ -333,7 +349,7 @@ */ shutdown(sc, 0); -#ifndef NETWARE +#ifdef PHP_WIN32 closesocket(sc); #else /* closesocket commented out since it was giving undefined symbol linker error @@ -805,9 +821,17 @@ /* Connect to server */ sock_in.sin_family = AF_INET; sock_in.sin_port = htons(portnum); +#if PHP_WIN32 || NETWARE sock_in.sin_addr.S_un.S_addr = GetAddr(MailHost); +#else + sock_in.sin_addr.s_addr = GetAddr(MailHost); +#endif +#if PHP_WIN32 || NETWARE if (connect(sc, (LPSOCKADDR) & sock_in, sizeof(sock_in))) +#else + if (connect(sc, & sock_in, sizeof(sock_in))) +#endif return (FAILED_TO_CONNECT); /* receive Server welcome message */ @@ -828,7 +852,7 @@ // Author/Date: jcar 20/9/96 // History: //********************************************************************/ -#ifndef NETWARE +#ifdef PHP_WIN32 int Post(LPCSTR msg) #else int Post(char *msg) @@ -919,13 +943,17 @@ // Author/Date: jcar 20/9/96 // History: //********************************************************************/ -#ifndef NETWARE +#ifdef PHP_WIN32 unsigned long GetAddr(LPSTR szHost) #else unsigned long GetAddr(char * szHost) #endif { +#if PHP_WIN32 || NETWARE LPHOSTENT lpstHost; +#else + struct hostent *lpstHost; +#endif u_long lAddr = INADDR_ANY; /* check that we have a string */ @@ -937,9 +965,13 @@ /* If not an address, then try to resolve it as a hostname */ if ((lAddr == INADDR_NONE) && (strcmp(szHost, "255.255.255.255"))) { +#if PHP_WIN32 || NETWARE lpstHost = gethostbyname(szHost); +#else + lpstHost = gethostbyname(szHost); +#endif if (lpstHost) { /* success */ -#ifndef NETWARE +#ifdef PHP_WIN32 lAddr = *((u_long FAR *) (lpstHost->h_addr)); #else lAddr = *((u_long *) (lpstHost->h_addr)); diff -ru php-5.0.3.orig/win32/sendmail.h php-5.0.3/win32/sendmail.h --- php-5.0.3.orig/win32/sendmail.h 2003-12-08 23:10:42 +0100 +++ php-5.0.3/win32/sendmail.h 2005-03-11 22:12:04 +0100 @@ -1,6 +1,6 @@ #if !defined(sendmail_h) /* Sentry, use file only if it's not already included. */ #define sendmail_h -#ifndef NETWARE +#ifdef PHP_WIN32 #include <windows.h> #endif @@ -44,13 +44,13 @@ int MailConnect(); int PostHeader(char *, char *, char *, char *); -#ifndef NETWARE +#ifdef PHP_WIN32 int Post(LPCSTR msg); #else int Post(char *msg); #endif int Ack(char **server_response); -#ifndef NETWARE +#ifdef PHP_WIN32 unsigned long GetAddr(LPSTR szHost); #else unsigned long GetAddr(char * szHost);
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php