Hi David,

mail() and imap_mail() both call's the internal function TSendMail(). This
is the function that generates the error. the imap version does some
additional chacks for headers. I'll take a look to see if we can make the
error message more informative.

- Frank

> ok thanks. but still, how is it that
> 
> mail('[EMAIL PROTECTED]','subject','body',"From: [EMAIL PROTECTED]");
> 
> should produce an error message stating "custom "From:" header
missing"?
> 
> and is there any reason the custom header can't be parsed, and if a
> "From:" header is found, to use that instead of sendmail_from value?
> 
> thanks again.
> 
> 
> On Wed, August 18, 2004 6:11 pm, Frank M. Kromann said:
> >
> > These extra parameters to the TSendMail function are used by
imap_mail().
> > To use this function you need to load the imap extension but you get a
few
> > more options that are not available in the standard mail function.
See
> > http://php.net/imap_mail for more information.
> >
> > - Frank
> >
> >
> >> 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
> >>
> >
> >
> >
> >
> 
> -- 
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
> 

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

Reply via email to