Introduction
- The php mail() function uses sendmail by default.
- Windows does not have sendmail.
- Hence we use fake sendmail.
- This article is taken from the comments in the Online PHP Manual for the mail() function.
Getting Fake SendMail
- Download sendmail.zip from http://glob.com.au/sendmail/
- Unzip this in a folder on your local disk (preferably use a simple path, for example c:/xampp/sendmail -- long filenames could cause problems)
php.ini Configuration
- Edit your c:/xampp/php/PHP.INI file (note: WAMP users should access their php.ini file from the WAMP menu). Go to the [mail function] section and modify it as such:
[mail function] ; For Win32 only. ;SMTP = ; For Win32 only. ;sendmail_from = ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = "C:/xampp/sendmail/sendmail.exe -t" ; Force the addition of the specified parameters to be passed as extra parameters ; to the sendmail binary. These parameters will always replace the value of ; the 5th parameter to mail(), even in safe mode. ;mail.force_extra_paramaters =
.... and save the changes.
sendmail.ini Configuration
- Open the c:/xampp/sendmail/sendmail.ini and modify the settings to:
[sendmail] ; you must change mail.mydomain.com to your smtp server, ; or to IIS's "pickup" directory. (generally C:\Inetpub\mailroot\Pickup) ; emails delivered via IIS's pickup directory cause sendmail to ; run quicker, but you won't get error messages back to the calling ; application. smtp_server=mail.yourdomain.com ; smtp port (normally 25) smtp_port=25 ; the default domain for this server will be read from the registry ; this will be appended to email addresses when one isn't provided ; if you want to override the value in the registry, uncomment and modify default_domain=yourdomain.com ; log smtp errors to error.log (defaults to same directory as sendmail.exe) ; uncomment to enable logging ; error_logfile=sendmail_error.log ; create debug log as debug.log (defaults to same directory as sendmail.exe) ; uncomment to enable debugging ; debug_logfile=sendmail_debug.log ; if your smtp server requires authentication, modify the following two lines ;auth_username= ;auth_password= ; if your smtp server uses pop3 before smtp authentication, modify the ; following three lines pop3_server=mail.yourdomain.com pop3_username=you@yourdomain.com pop3_password=mysecretpassword ; to force the sender to always be the following email address, uncomment and ; populate with a valid email address. this will only affect the "MAIL FROM" ; command, it won't modify the "From: " header of the message content force_sender=you@yourdomain.com ; sendmail will use your hostname and your default_domain in the ehlo/helo ; smtp greeting. you can manually set the ehlo/helo name if required hostname=
... and save the changes.
Use it
- The optional error and debug logging is recommended when trying this the first time, so you have a clue what goes wrong in case it doesn't work.
- Force_sender is also optional, but recommended to avoid confusion on the server end.
- Obviously mail.yourdomain.com, you@yourdomain.com, and mysecretpassword should be the relevant info for your SMTP server.
- Now restart the XAMPP / WAMP services (mainly Apache so PHP re-reads it's config).
Now you're good to go and use the PHP mail() statement as if you're a Unix user ...