How To: PHP Sendmail and XAMPP on Windows
It can be difficult getting the PHP’s default mail functions to work when you run an apache server on windows instead of a unix environment. I ran into this problem with my server (running XAMPP), and thought others may benefit from a quick how-to. Another slight problem I had to get working was using an SMTP server that requires SSL connections (gmail for one). I didn’t realize that most recent XAMPP releases have sendmail built in already. This takes part of the hassel out, but we still have some configuring to do.
First, ensure that you have an XAMPP release that does include the fake sendmail program. [More details here]
Next, go to the XAMPP directory (often C:\xampp\), then open the ’sendmail’ subdirectory. You’ll most likely see the following files (default):
sendmail.exe
readme.html
sendmail.ini
sendmail_example.ini
license.html
Open the file sendmail.ini – this is where all of your SMTP server configurations will go, for example: SMTP Username, Password, Host, Port, etc
My sendmail.ini file looks something like this:
; configuration for fake sendmail
[sendmail]
smtp_server=smtp.gmail.com
smtp_port=465
; SMTPS (SSL) support
; auto = use SSL for port 465, otherwise try to use TLS
; ssl = alway use SSL
; tls = always use TLS
; none = never try to use SSL
smtp_ssl=auto
default_domain=google.com
error_logfile=error.log
; if your smtp server requires authentication, modify the following two lines
auth_username=<USERNAME / EMAIL ADDRESS HERE>
auth_password=<PASSWORD HERE>
Note that this is a very simple setup. The variable names are fairly obvious, so simply fill in the SMTP server, port, ssl mode, username, password, and default domain / error log if you’d like.
GMail requires an SSL connection, so my config was setup to use SSL port 465 and smtp_ssl=auto. If SSL is not necessary for your SMTP server, simply set smtp_ssl=none.
Once the configuration is setup, make sure to save changes, then exit.
If you are going to use SSL connections, you will need two additional files, available here "http://glob.com.au/sendmail/sendmail-SSL.zip" (as of March 2009) – if this link no longer works, use the contact form and let me know.
Extract the two compressed files (libeay32.dll and ssleay32.dll) to the same directory as sendmail.exe (for me, C:\xampp\sendmail\)
Now, everything on the sendmail’s end is setup – now we just need to let the server know its there!
Edit your PHP.ini file:
XAMPP installations often have multiple files. If you are doubtful of the correct one, you can always go through and change them all. But before you do that, change the php.ini in \xampp\apache\bin\.
Look for the following line:
sendmail_path = " \“C:\xampp\sendmail\sendmail.exe \" -t”
Uncomment the line (if already commented) by removing the semicolon at the start.
Ensure that the path to sendmail.exe is correct (this is correct for me).
Save and exit php.ini
Restart the apache server and everything should work!
Comment if you have a question.