![]() |
![]() |
|||||||||
|
|
|
|||||||||
|
|||||||
| Register | Blogs | Xbox Live | FAQ | Donate | Members List | Social Groups | Calendar | Search | Today's Posts | Mark Forums Read |
![]() |
|
|
LinkBack | Thread Tools | Display Modes |
|
|
#1 |
|
Ultimate Lifeform
Join Date: Jun 2007
Location: London, United Kingdom
Posts: 906
Thanks: 23
Thanked 69 Times in 39 Posts
Blog Entries: 17
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Xbox Live Ranking: 106th
|
Configuring PHP under Windows to use Gmail or External SMTP Server [SSL] Keywords: SSL, SMTP Authentication, External SMTP, Google Apps, Fake Sendmail When installing and setting up Apache, PHP and MySQL on my Windows Server box I have a unique problem, I didn't run my own mail server. I got sick of having to deal with spam issues as well as ensuring maximum uptime or end up losing mail. I then decided to take advantage of Google Apps, which allows you to use Google Services for your domains including the Gmail Service, which allows you to have your email handled by Google. What's best? You still keep the domain name, so you get all the features of Gmail, but with your own domain name and you still retain full control of users. To see an example of the log on, check out http://mail.digiex.net. One big problem with this though, how do you configure PHP so it can send mail now that you don't run the mail service yourself? In the PHP.ini you can configure to use SMTP to drop off mail but it doesnt offer you many options, whats missing is SSL support which Gmail uses as well as SMTP authentication which yet again, Gmail uses. This is the best part, I found a "Unix fake sendmail" application for Windows, what this does is accepts mail in the same way Unix does, but then passes it onto another mail server and supports SSL and authentication. Configuration This configuration will talk you through setting up the service with Gmail using a Custom Domain. If you have not yet done this, you will need to set up Google Apps for your Domain by clicking here. Once you have enabled Gmail for your domain you will need to set up an account for webmaster or whatever email address you intend to use for your PHP Mails. Once the account is created you must log into it once and enable POP3 or IMAP under Settings, this usually then enables SMTP on your Gmail so that you can use it with this. If you are not using Gmail you will need to do some additional steps like setting up the SMTP server and port. You will need to find these out from your email provider. This does NOT work with Windows Live Domains due to the lack of SMTP. Step 1 - Download and Configure Sendmail The first step is to download Fake Sendmail created by Byron Jones. I have provided a copy which already has SSL supported added in and configured to work with Gmail which can be downloaded by clicking here. You will need to extract it somewhere on your Server. Its recommended you choose somewhere sensible because once set up you will need to reconfigure PHP if you change the path, so don't bother with your Desktop. If you have locked down Apache and PHP with a seperate locked down user account, that user account with need access to read and run applications in the folder where you store Sendmail. For the purpose of this guide, I have stored it in C:\inetpub\sendmail\ Once extracted, open Sendmail.ini in your favourite text editor, Notepad will do. You will need to customize this configuration to your own. The lines highlighted in red must be changed and configured to your domain settings. Words highlighted in blue should ONLY be changed if you are not using Gmail for your email. Code:
; configuration for fake sendmail ; if this file doesn't exist, sendmail.exe will look for the settings in ; the registry, under HKLM\Software\Sendmail [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=smtp.gmail.com ; smtp port (normally 25) smtp_port=587 ; 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=domain.com ; log smtp errors to error.log (defaults to same directory as sendmail.exe) ; uncomment to enable logging error_logfile=error.log ; create debug log as debug.log (defaults to same directory as sendmail.exe) ; uncomment to enable debugging ;debug_logfile=debug.log ; if your smtp server requires authentication, modify the following two lines auth_username=webmaster@domain.com auth_password=password ; if your smtp server uses pop3 before smtp authentication, modify the ; following three lines pop3_server= pop3_username= pop3_password= ; 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=webmaster@domain.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= Once you have configured this you can save your sendmail.ini and Sendmail is configured. Its now time to move onto Step 2. Step 2 - Configuring PHP to use Sendmail You will need to open your PHP configuration (PHP.ini), you will then need to look for the [mail function] section. Once there, look for the line which asks for Sendmail path, you may notice it says for Unix only, but ignore this. Code:
; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = "C:\inetpub\sendmail\sendmail.exe -t" Also ensure all other options under [mail function] is commented out using ; so that the sendmail path is the only option uncommented. Your [mail function] should now look something like this: Code:
[mail function] ; For Win32 only. ;SMTP = localhost ;smtp_port = 25 ; For Win32 only. ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = "C:\inetpub\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_parameters = You have now configured PHP to use your sendmail which should in turn send the mail via your Gmail account (or whatever account you configured). Now its time to test it... Step 3 - Test You will need to now run a php script under your PHP environment which sends mail via the PHP sendmail command. In my case it was easy to test with vBulletin. ![]() Once you have sent the email, check the Inbox for whichever account you sent it in a couple of minutes and the email should be there! If you received an email, congratulations you have configured your web server perfectly ![]() If not, there could be a problem. To help with troubleshooting heres a few things to check: Check the error log of the PHP script and make sure it didnt have any problems running the Sendmail command in PHP. Check the error.log in the Sendmail.exe directory and see if it had problems logging into your SMTP server to send the mail Make sure the receipt is not having email problems, try it with a few people with different mail providers incase theres a problem there.
__________________
![]() |
|
|
|
| Thanks from: |
|
|
|
|
|
|
|
|
#2 |
|
Stayed to Post
Join Date: May 2009
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
![]() |
Hello, thank you, this is an excellent guide. Really helped me out.
|
|
|
|
|
|
#3 |
|
Stayed to Post
Join Date: Jun 2009
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
![]() |
great post m8!
i just followed your tutorial to the dot and got it to work.. there was a slight hitch in between.. even though i changed the php.ini file, the phpinfo() on server still showed no value for sendmail parameters... i just restarted the server and voila.. mails came!!! i'm learning php and it feels nice to get things working.... thanks for your effort! |
|
|
|
|
|
#4 |
|
Stayed to Post
Join Date: Jun 2009
Posts: 2
Thanks: 1
Thanked 0 Times in 0 Posts
![]() |
Hi all!
I'm having a problem sending mail using fake sendmail, I have a windows 2003 machine with IIS and PHP, If i try to send mail via command line and a script I created in php, it all works fine. If i try to send mail via IIS I get this error: "Could not execute mail delivery program C:\Inetpub\sendmail\sendmail.exe -t" Thanks in advance for all your help, Jorge |
|
|
|
|
|
#5 | ||
|
The God-Like KinG
Join Date: Aug 2008
Location: Bimble, KY
Posts: 1,479
Thanks: 123
Thanked 696 Times in 254 Posts
Blog Entries: 18
![]() ![]() ![]() ![]() ![]() ![]() ![]() Xbox Live Ranking: 11th
|
Quote:
Also Quote:
|
||
|
|
|
|
|
#6 | |
|
Stayed to Post
Join Date: Jun 2009
Posts: 2
Thanks: 1
Thanked 0 Times in 0 Posts
![]() |
Quote:
It seems to be a premissions issue, but I can't find what more premissions do I have to give in the directory sendmail.exe resides. Thanks in advanced, Jorge |
|
|
|
|
|
|
#7 |
|
Stayed to Post
Join Date: Jun 2009
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
![]() |
neozaga,
Check permissions for cmd.exe in system32 folder. I had the same problem. Having set Read and Execute to IUSR_MACHINENAME I've solved the issue. If doesn't help download ProcMon and see what inetinfo.exe fails to do. |
|
|
|
|
|
#8 |
|
Stayed to Post
Join Date: Sep 2009
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
![]() |
Thank you! What a great article. I've just written a post about this on my blog with a link to it.
That was one of the most easy to follow - well explained and useful technical postings I've seen in a long time. I now have my Drupal site with mailhandler working like a dream - you superstar! Muah! - lol |
|
|
|
|
|
#9 |
|
Stayed to Post
Join Date: Sep 2009
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
![]() |
Looks as though I spoke a little too soon. The first test I ran no errors came back but subsequently I'm getting the same errors as everyone else:
warning: mail() [function.mail]: Could not execute mail delivery program 'C:\inetpub\sendmail\sendmail.exe in W:\WWWRoot\mydomainname\includes\mail.inc on line 193. I have put sendmail.exe in the same directory as you just for simplicity sake. Also my php.ini file is correct with my sendmail_path pointing to the correct place and is the only line in the [mail function] uncommented. I have added IUSER_(MACHINENAME) with read and execute properties to cmd.exe in windows\system32 and rebooted my server. (Mail is being retrieved from the above address fine) Any ideas? Last edited by scifisi; 30-09-09 at 20:33. |
|
|
|
|
|
|
|
![]() |
| Bookmarks |
| Thread Tools | |
| Display Modes | |
|
|