Go Back   Digiex > Computing Section > Guides and Tutorials > Networking

Reply
 
LinkBack Thread Tools Display Modes
Old 17-10-08, 16:29   #1
Ultimate Lifeform
 
Nimrod's Avatar
 
Join Date: Jun 2007
Location: London, United Kingdom
Posts: 906
Thanks: 23
Thanked 69 Times in 39 Posts
Blog Entries: 17
Nimrod has a reputation beyond reputeNimrod has a reputation beyond reputeNimrod has a reputation beyond reputeNimrod has a reputation beyond reputeNimrod has a reputation beyond reputeNimrod has a reputation beyond reputeNimrod has a reputation beyond reputeNimrod has a reputation beyond reputeNimrod has a reputation beyond reputeNimrod has a reputation beyond reputeNimrod has a reputation beyond repute
Send a message via AIM to Nimrod Send a message via Yahoo to Nimrod
Default Configuring PHP under Windows to use Gmail or External SMTP Server [SSL]

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"
In this case, I am storing "sendmail.exe" in C:\inetpub\sendmail. If you are storing it elsewhere, be sure to declare it here. You also need to add the argument -t for it to work.

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.



Attached Files
File Type: zip sendmail.zip (806.3 KB, 4082 views)
__________________
Nimrod is offline   Reply With Quote

Adverts are shown to help cover bandwidth costs - Donate or make 30+ posts to remove them.
Old 07-05-09, 02:12   #2
ade
Stayed to Post
 
Join Date: May 2009
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
ade is on a distinguished road
Default thanks

Hello, thank you, this is an excellent guide. Really helped me out.
ade is offline   Reply With Quote
Old 12-06-09, 05:59   #3
Stayed to Post
 
Join Date: Jun 2009
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
exodus is on a distinguished road
Default

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!
exodus is offline   Reply With Quote
Old 16-06-09, 13:30   #4
Stayed to Post
 
Join Date: Jun 2009
Posts: 2
Thanks: 1
Thanked 0 Times in 0 Posts
neozaga is on a distinguished road
Default Promblem when sending mail using fake send mail

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
neozaga is offline   Reply With Quote
Old 16-06-09, 13:47   #5
The God-Like KinG
 
xzKinGzxBuRnzx's Avatar
 
Join Date: Aug 2008
Location: Bimble, KY
Posts: 1,479
Thanks: 123
Thanked 696 Times in 254 Posts
Blog Entries: 18
xzKinGzxBuRnzx has much to be proud ofxzKinGzxBuRnzx has much to be proud ofxzKinGzxBuRnzx has much to be proud ofxzKinGzxBuRnzx has much to be proud ofxzKinGzxBuRnzx has much to be proud ofxzKinGzxBuRnzx has much to be proud ofxzKinGzxBuRnzx has much to be proud of
Send a message via MSN to xzKinGzxBuRnzx Send a message via Yahoo to xzKinGzxBuRnzx Send a message via Skype™ to xzKinGzxBuRnzx
Default

Quote:
Originally Posted by neozaga View Post
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
Are you sure you configured your php.ini correctly? Make sure you set your sendmail directory correctly. should say, sendmail_path = "C:\inetpub\sendmail\sendmail.exe -t" if thats the directory which you saved the sendmail program to.

Also
Quote:
Originally Posted by Nimrod
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.
xzKinGzxBuRnzx is offline   Reply With Quote
Old 16-06-09, 13:56   #6
Stayed to Post
 
Join Date: Jun 2009
Posts: 2
Thanks: 1
Thanked 0 Times in 0 Posts
neozaga is on a distinguished road
Default

Quote:
Originally Posted by xzKinGzxBuRnzx View Post
Are you sure you configured your php.ini correctly? Make sure you set your sendmail directory correctly. should say, sendmail_path = "C:\inetpub\sendmail\sendmail.exe -t" if thats the directory which you saved the sendmail program to.

Also
Yes, the php.ini is configured correctly, I can send e-mails if I do php.exe C:\inetpub\snigdev\testemails.php in the command line, but via IIS doesn't work.

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
neozaga is offline   Reply With Quote
Old 17-06-09, 14:05   #7
Stayed to Post
 
Join Date: Jun 2009
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
andr is on a distinguished road
Default

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.
andr is offline   Reply With Quote
Old 29-09-09, 15:30   #8
Stayed to Post
 
Join Date: Sep 2009
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
scifisi is on a distinguished road
Talking Stunning!

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
scifisi is offline   Reply With Quote
Old 30-09-09, 11:09   #9
Stayed to Post
 
Join Date: Sep 2009
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
scifisi is on a distinguished road
Default Doh!

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.
scifisi is offline   Reply With Quote
 
Reply

Bookmarks
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 00:26.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.2 ©2009, Crawlability, Inc.
Site contents, theme and layout © 2003 - 2009, Digiex
Digiex™ is a protected Trademark