1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include "php.h"
#include "ext/standard/info.h"
#if !defined(PHP_WIN32)
#include "build-defs.h"
#endif
#include "php_mail.h"
#include "php_ini.h"
#if HAVE_SENDMAIL
#ifdef PHP_WIN32
#include "win32/sendmail.h"
#endif
#ifdef COMPILE_DL_STANDARD
ZEND_GET_MODULE(odbc)
#endif
/* {{{ proto int mail(string to, string subject, string message [, string additional_headers])
Send an email message */
PHP_FUNCTION(mail)
{
pval **argv[4];
char *to=NULL, *message=NULL, *headers=NULL, *subject=NULL;
int argc;
argc = ZEND_NUM_ARGS();
if (argc < 3 || argc > 4 || zend_get_parameters_array_ex(argc, argv) == FAILURE) {
WRONG_PARAM_COUNT;
}
/* To: */
convert_to_string_ex(argv[0]);
if ((*argv[0])->value.str.val) {
to = (*argv[0])->value.str.val;
} else {
php_error(E_WARNING, "No to field in mail command");
RETURN_FALSE;
}
/* Subject: */
convert_to_string_ex(argv[1]);
if ((*argv[1])->value.str.val) {
subject = (*argv[1])->value.str.val;
} else {
php_error(E_WARNING, "No subject field in mail command");
RETURN_FALSE;
}
/* message body */
convert_to_string_ex(argv[2]);
if ((*argv[2])->value.str.val) {
message = (*argv[2])->value.str.val;
} else {
/* this is not really an error, so it is allowed. */
php_error(E_WARNING, "No message string in mail command");
message = NULL;
}
if (argc == 4) { /* other headers */
convert_to_string_ex(argv[3]);
headers = (*argv[3])->value.str.val;
}
if (php_mail(to, subject, message, headers)){
RETURN_TRUE;
} else {
RETURN_FALSE;
}
}
/* }}} */
int php_mail(char *to, char *subject, char *message, char *headers)
{
#ifdef PHP_WIN32
int tsm_err;
#else
FILE *sendmail;
int ret;
char *sendmail_path = INI_STR("sendmail_path");
#endif
#ifdef PHP_WIN32
if (TSendMail(INI_STR("SMTP"), &tsm_err, headers, subject, to, message) != SUCCESS){
php_error(E_WARNING, GetSMErrorText(tsm_err));
return 0;
}
#else
if (!sendmail_path) {
return 0;
}
sendmail = popen(sendmail_path, "w");
if (sendmail) {
fprintf(sendmail, "To: %s\n", to);
fprintf(sendmail, "Subject: %s\n", subject);
if (headers != NULL) {
fprintf(sendmail, "%s\n", headers);
}
fprintf(sendmail, "\n%s\n", message);
ret = pclose(sendmail);
if (ret == -1) {
return 0;
} else {
return 1;
}
} else {
php_error(E_WARNING, "Could not execute mail delivery program");
return 0;
}
#endif
return 1;
}
PHP_MINFO_FUNCTION(mail)
{
#ifdef PHP_WIN32
php_info_print_table_row(2, "Internal Sendmail Support for Windows 4", "enabled");
#else
php_info_print_table_row(2, "Path to sendmail", INI_STR("sendmail_path") );
#endif
}
#else
PHP_FUNCTION(mail) {}
PHP_MINFO_FUNCTION(mail) {}
#endif
/*
* Local variables:
* tab-width: 4
* End:
*/
|