Home  >  Article  >  Backend Development  >  Working principle and practice of mail() function and SMTP in php_PHP tutorial

Working principle and practice of mail() function and SMTP in php_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:30:03850browse

A script that sends E-MAIL is perhaps one of the most common scripts you can find on a Web site. Although it is simple, an email script can sometimes make programmers very frustrated. There are A function called mail(), it only needs to know the recipient's address and the body of the letter to send the email, but you still need to solve some tricky problems to make mail() work as you want.

For mail() to work, you must have an SMTP server for PHP to connect to. No matter how important this server is to the mail program, most people don't have the slightest idea how it works. In this tutorial, we will You'll reveal the secrets of SMTP and solve some common problems with sending emails using PHP. Other topics in this article will include methods for looping through an address list and sending an email to a recipient in both text and HTML formats.

SMTP is the abbreviation of Simple Mail Transfer Protocol, and an SMTP server is a computer that runs this protocol and sends out emails. Running this protocol actually refers to running programs such as Sendmail and Qmail --If you are using a non-Windows computer. On the Windows platform, the SMTP service program that is part of the Windows NT ServicePack or built into Windows 2000 is a typical program.

I'm not saying that those are the only SMTP packages, but they are the most common ones. If your website uses part of the Internet Service Provider's virtual hosting package, then the SMTP server program is It should already be installed on this computer. If you are the system administrator of a computer at an ISP or indoors, then you most likely have some kind of SMTP software installed on this computer to handle requests from the Web. The process of the server sending emails.

However, if you are an individual user and only have a development web server program running on your PC, you may not have SMTP software running on your machine. Here is a very simple but accurate rule of thumb : If you are a Windows user and have never seen the words SMTP server, then you are not running this program. If you do not, then you have two options: install, configure, and maintain an SMTP server program (if you If you don’t know what’s going on, I don’t recommend you to use this method) or use an existing SMTP server.

"How can I use a server if it's not running right now?" you may ask. If your computer is connected to the Internet via a dial-up connection (or DSL or cable), you can use your ISP outgoing mail server. For example, if your development computer is a Windows 98 system and uses a 56kbps modem to connect to the Internet through EarthLink, then you can use mail.earthlink.net as your SMTP server. No matter what email client your outgoing email server uses (Eudora, Outlook, NetscapeMail, etc.), they will all be the same process as your PHP code using your SMTP server. The trick is to make PHP know a little bit of the facts.

In the php.ini management configuration file, there are several entries that need to be set so that the mail() function can run properly. Before changing them, find out what they are used for. You can use the phpinfo() function Create a file to display the current configuration of the system. This file includes:

Save this file, place it in the file root directory of your web server, and access it through your browser. You should see a beautifully formatted message showing your configuration. .The items you want to view are as follows:

SMTP

sendmail_from

sendmail_path

If you are not using Windows, then the sendmail_path command is the only thing you have to worry about. If you are using Windows, you need to take a look at the last two commands.

If you are using Linux or a Unix variant, sendmail_path should look like this:

sendmail_path = /usr/sbin/sendmail

Or if you use Qmail:

sendmail_path = /var/qmail/bin/sendmail

In this command, you can also set configuration parameters to indicate queue buffering options or explicitly set the Return-Path header, as shown below:

sendmail_path = /usr/sbin/sendmail -t-fyou@yourdomain.com

As a non-Windows user, that's all you have to do. If you're using Windows, you have more to do. You also need to take a look at the SMTP and sendmail_from values. Don't be fooled by the sendmail_from directive The sendmail in the name is confusing. Although you don't use a program named Sendmail on Windows, that's just the name of the command. Don't let it scare you.

In the results displayed by your phpinfo(), look at the default values ​​of SMTP and sendmail_from - they are either blank or contain random values. You should change them to meaningful values.

If you are determined to run an SMTP service program on this computer, your entries in the php.ini file should be as follows:

SMTP = localhost

However, if you were to use your ISP's (EarthLink in this case) outgoing mail server, then the email in php.ini would look like this:

SMTP = mail.earthlink.net

You can also use an IP address instead of a domain name, as computers don’t distinguish between the two entries.

The second configuration directive is sendmail_from, which should be set to the email address in the From header. It can be changed in the script but is usually used as the default. Here is an example of this configuration directive youraddress@yourdomain. com refers to your own email address.

sendmail_from =youraddress@yourdomain.com

After making these configuration changes, restart the web server and use the phpinfo() function to verify the changes. After these tasks are completed, you can use PHP to send emails.

The mail() function is very simple: there are only five parameters, two of which are optional. These parameters are:

Recipient address

Topic

Letter content

Other file information headers (optional)

Other configuration options for SMTP service program (optional)

Additional header parameters control email functions such as CC, BCC, Reply-To, or other functions that follow the SMTP protocol. In this example, I only use the From and Reply-To headers.

If you want to send me an email but you are using a non-Windows system, the program code should be as follows:

 $to= "julie@thickbook.com";

 $subject = "ZDNet Developer article";

 $msg = "I completely understand SMTP servers now!";

$headers = "From:me@mycompany.comnReply-To:someoneelse@mycompany.com";

 $config = "-fwebmaster@mycompany.com";

mail("$to", "$subject", "$msg", "$headers", "$config");

echo "finished!";

 ?>

If you are using a Windows-based SMTP service, then you may not need to use the fifth parameter, and in the additional header information parameters (that is, the fourth parameter), you need to write them separately --Use rn instead of n. So, the same email sent via a Windows-based SMTP service would be as follows:

$to = "julie@thickbook.com";

 $subject = "ZDNet Developer article";

 $msg = "I completely understand SMTP servers now!";

$headers = "From:me@mycompany.comrnReply-To:someoneelse@mycompany.com";

mail("$to", "$subject", "$msg", "$headers");

echo "finished!";

 ?>

The echo statement in the script causes your web browser to display a message to you when the script completes. If you do not write the echo statement, you will get an "empty file" dialog box because there will be no output. Send to browser.

The mail() function will return true as long as it can connect to the specified SMTP server. But this does not mean that the email successfully reaches the recipient. The mail() function will not wait for or report the message from the SMTP server. Success/error code.

The mail() function may return a false value and then give you a warning of "Unable to connect at line x" or "Unknown error at line x." If either of these two messages appears , you should check the SMTP value in php.ini. There are two possibilities for causing these messages: the SMTP server is down, or PHP cannot connect to it. In either case, your email cannot Sent out.

This script uses hard-coded values ​​for these parameters. Using a simple HTML form, you can insert some values ​​​​in these parameters and have a nice feedback form.

                      >Note: For more exciting articles, please pay attention to the Programming Tutorial column of Bangke Home.

http://www.bkjia.com/PHPjc/767406.html

truehttp: //www.bkjia.com/PHPjc/767406.htmlTechArticleA script that sends E-MAIL is perhaps one of the most common scripts you can find on a Web site. , although it is simple, an email script can sometimes be very frustrating for programmers. There is a...
in PHP
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn