sorry in advance for the length, formatting and possible redundancy of
this message.

Anyway, on Windows, leaving "sendmail_from" blank and setting a "From:"
header in the extra headers parameter doesn't work.

test.php:
<?php
mail('[EMAIL PROTECTED]','subject','body',"From: [EMAIL PROTECTED]");
/*
Warning: mail(): "sendmail_from" not set in php.ini or custom "From:"
header missing in C:\dev\quiktests\test.php on line 3
*/

??--> http://bugs.php.net/bug.php?id=28976
there are also a couple user notes on the mail manual page to the effect
of "use ini_set()", but that seems messy, especially for distributed
scripts to do a check everytime they send mail():
if(PHP_OS == 'Win' && empty(ini_get("sendmail_from")){
 ini_set("sendmail_from", $tempFromAddress);
}


I don't know C (or any cvs/patch tools), but here's what I think is going on:

in ext/standard/mail.c we find the following code (notice the last
argument to TSendMail() is NULL):

[code]
....
PHPAPI int php_mail(char *to, char *subject, char *message, char *headers,
char *extra_cmd TSRMLS_DC) {
.....
if (!sendmail_path) {
#if (defined PHP_WIN32 || defined NETWARE)
  /* handle old style win smtp sending */
  if (TSendMail(INI_STR("SMTP"), &tsm_err, &tsm_errmsg, headers, subject,
to, message, NULL, NULL, NULL) == FAILURE) {
....
[/code]


unfortunately, in win32/sendmail.c we find this:

[code]
....
PHPAPI int TSendMail(char *host, int *error, char **error_message,
  char *headers, char *Subject, char *mailTo, char *data,
  char *mailCc, char *mailBcc, char *mailRPath)
{
....
/* Fall back to sendmail_from php.ini setting */
if (mailRPath && *mailRPath) {
  RPath = estrdup(mailRPath);
} else if (INI_STR("sendmail_from")) {
  RPath = estrdup(INI_STR("sendmail_from")); }
else {
  if (headers) {
    efree(headers);
    efree(headers_lc);
  }
  *error = W32_SM_SENDMAIL_FROM_NOT_SET; return FAILURE;
}
....
[/code]

it seems mailRPath will always be NULL and "sendmail_from" will always be
"fallen back" to, and thus you get an error.

maybe, probably, i'm missing something, but at the very least, the error
message ("custom "From:" header missing") or the documentation could be
altered.

thanks.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to