Jump to navigation Jump to search

PHP mail function

109 bytes added, 17:59, 25 January 2010
Major grammar change, and some rewriting for clarity,
'''Uniform Server 3.5-Apollo.'''
You may be using Uniform Sever either as a test environment or for learning PHP what . What you will quickly discover is PHP’s mail() function does not work. Strictly no That's strictly not true it . It does work however , but because of its limitations , it may be prevented from working, for . For instance a host may require authentication, which the function does not support. Or it could simply be a case of not having it being set-up correctly.
'''Starting point'''
I am assuming you are not running your own mail server and do not wish to install one. All you want to do is send emails to or via (relay) your ISP mail server (as a relay) using PHP, either to test your own scripts or to test third party ones. This write-up article looks at ways to get you up and running.
== Test Scripts ==
I try to make UniCenter as practical as possible hence provide scripts , and when things go wrong , throw in a few error messages. This write-up is no exception, I will be using two basic scripts these , which are shown below.
* '''mail.html''' --- Basic page containing a mail form.
'''Above php code'''
The above basic code works as is, however it is inconvenient to use. Every time you run the form (mail.htlm) all the text fields require an entry.
I am lazy and it becomes a choir chore, especially if you only want to change one field changing and to ignore the others.
I have modified this basic script, it inserts default values for empty form text boxes. This new version is the one downloadable using the above link.
'''''[[#top | Top]]'''''
== A better mail.php script ==
A better '''mail.php''' test script, . It adds defaults default values to empty text fields. After saving this script , one minor change is required to personalise it for your own use.
Open the file '''mail.php''' and change it as follows:
Change this to your email address as provided by your ISP.
For example , if your email address is '''''' , the line will look similar to this:
if (empty($_POST['email'])){<br>
Start UniServer and type the following into your browser address bar: '''<nowiki>http://localhost/mail.html</nowiki>'''
There is no need to enter any data into the text boxes just . Just click on '''Send''' and with luck you will receive this error message:
This error message was expected it . It highlights the problem we are trying to resolve. Our script produced the last line as for and the warning that was produced by PHP.
PHP was looking for a mail server to use, . It can’t find one so it gives up. The error message is actually very informative its . It's telling us where the problem is and in what file .
'''''[[#top | Top]]'''''
== php.ini ==
Open file php.ini located in folder *\Uniform Server\udrive\usr\local\php search . Search for this section : [mail function] (starts at around line 612)
<nowiki>;</nowiki> mail.force_extra_paramaters =
These are the defaults settings, you . You can see that PHP is looking for an SMTP server on the '''localhost''' machine and will use port '''25''' to communicate with it.
There is no reason why this SMTP server should be local. In theory you can use anyone’s SMTP server for replaying relaying your mail to the appropriate recipient.(It really is a shame , but spammers have killed off this open-relay mechanism.)
ISP’s now disable open relaying and check if you are a valid customer before allowing your email to be relayed through their SMPT servers.
'''''There are two methods they use for validation'':'''
# You must be directly connected to their system as a paying user (your normal ISP Internet connection).
# You are not directly connected to their system hence , so you need a name and password to access their SMTP server.
'''''[[#top | Top]]'''''
== Solution 1 ==
Since we are not running our own SMTP server and because of validation , we are restricted to using our ISP’s SMTP server. To use this server , all that is required is to point PHP to at it. To do this you need to known the name of this server, a . A quick way to find it is to check what settings you have in Outlook Express (or the mail client you are using).
For Outlook Express use:
# This brings up a new form, select the '''Mail Tab''' and click on the '''default account name''', Click on '''properties'''
# A new menu is opened, Click on the '''Servers Tab'''
# The text box named '''Outgoing mails (SMTP)''' contains the name of the server for . For example , ''''''
Alternatively check your ISP’s web site and look for "how to set up an email client." the The SMPT server name will found there.
Replace localhost with your ISP's SMTP server name in . In this example I am using ''''''.
When a recipient reads their email , this email address is displayed in their “from box”. If you expect a reply you should use a real email address. It does not have to be one provided by your ISP.
Replace '''''' with a real email address in this example I am using ''''''
* '''Thank you for sending email'''
Login to your mail account and check if you received the message.
'''''Test 2'':'''
To check if your ISP relays to other SMTP servers. Send an email to a friend or to another account you own, . '''make Make sure your ISP is not hosting these accounts'''.
Run the test page '''<nowiki>http://localhost/mail.html</nowiki>.''' this This time you will need to fill in the text boxes.Confirm that the emails are received, and that completes the tests.
'''''[[#top | Top]]'''''
== Problems ==
In the real world things never run that smoothly something . Something always throws a spanner in the works. If the above fails , use this checklist to see if it either resolves the problem or points to where the problem is:
# You need to be connected to the Internet (via your ISP) before running your PHP program.
# If your host requires authentication for outgoing mail you cannot use the PHP mail function because it does not support it.
# Your service provider may be using an alternative port and not 25 (unlikely) Note: Check what you use in Outlook Express to confirm 2) and 3)
# Make sure your firewall or antivirus program is not blocking '''php.exe''' Internet access (port25).
I think that covers most causes you would . You may be surprised that 1) is the prime candidate , especially when testing.
'''''[[#top | Top]]'''''
The above solution is quick to implement and allows you to test email scripts and any third party scripts that use PHP’s mail function.
One real drawback with this solution is that it cannot be used if your service provider requires SMTP authentication.
I noticed on the forum, that to over come this problem Olajide recommends using '''fake sendmail for Windows'''. For completeness I cover this on the [[installing Fake Sendmail for Windows |next page]] solution 2.
'''''[[#top | Top]]'''''

Navigation menu