I am using PHP with Apache on Linux, with Sendmail. I use the PHP mail
function. The email is sent, but the envelope has the Apache_user@localhostname
in MAIL FROM
(example nobody@conniptin.internal) and some remote mail servers reject this because the domain doesn't exist (obviously). Using mail
, can I force it to change the envelope MAIL FROM
?
EDIT: If I add a header in the fourth field of the mail
() function, that changes the From
field in the headers of the body of the message, and DOES NOT change the envelope MAIL FROM
.
I can force it by spawning sendmail with sendmail -t -odb -oi -frealname@realhost
and piping the email contents to it. Is this a better approach?
Is there a better, simpler, more PHP appropriate way of doing this?
EDIT: The bottom line is I should have RTM. Thanks for the answers folks, the fifth parameter works and all is well.
PHP Official documentation for mail()
You can try this (im not sure tho):
I would also recommend checking into PHPMailer. It's great for creating and sending email, making the process a lot easier, along with support for SMTP.
mail() has a 4th and 5th parameter (optional). The 5th argument is what should be passed as options directly to sendmail. I use the following:
What you actually need to do is change the hostname of the machine Apache is running on, plus the user Apache is running as.
In your current case it is:
Changing those two values is pretty simple and will solve the root of your problem.
Although if you need to do it from PHP then perhaps use the
system/exec
functions. I do not think it will work in practice though, as you need to restart Apache and probably also the entire host for the new names to be used.