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

Reply via email to