# mail() on windows

- Thread: https://externals.io/message/12234
- Original archive: https://news-web.php.net/php.internals/12234
- Started by Frank M. Kromann on 2004-08-18T23:11:42+00:00
- Messages: 2
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #12234 — Frank M. Kromann — 2004-08-18T23:11:42+00:00

URL: https://externals.io/message/12234#12234

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('example@php.com','subject','body',"From: me@example.com\r\n");
> /*
> 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.

---

## #12251 — David Vance — 2004-08-19T06:12:40+00:00

URL: https://externals.io/message/12234#12251 · In reply to: #12234

ok thanks. but still, how is it that

mail('example@php.com','subject','body',"From: me@example.com\r\n");

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
>
>
> > […]
> effect
> > […]
> going on:
> > […]
> *headers,
> > […]
> subject,
> > […]
> be
> > […]
> error
> > […]
