Detailed explanation of the usage of mail() function in PHP and the working principle of SMTP

伊谢尔伦
Release: 2023-03-11 15:28:01
Original
3443 people have browsed it

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 is a script in PHP called mail () function, it only needs to know the recipient's address and the body of the letter to send mail, but to make mail() run as you want, you still need to solve some thorny problems.

To make mail () works, you must have an SMTP server so that PHP can connect to it. 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 reveal the secrets of SMTP and Solve some common problems with sending emails using PHP. Other topics in this article will include ways to loop through an address list and send an email to a recipient in both text and HTML formats.

SMTP is the abbreviation of Simple Mail Transfer Protocol (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 Program - 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 such program.

I'm not saying those are the only SMTP packages, but they are the most common. If your website uses part of an Internet Service Provider's virtual hosting package, then the SMTP server should already be there. is 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. Handles the process of sending email from a Web server.

However, if you are an individual user and only have a development Web server program running on your PC, you may not have SMTP running on your machine. Software. Here is a very simple but accurate rule of thumb: If you are a Windows user and never see the words SMTP server, then you are not running the program. If you are not, then you have two options: Install , configure, and maintain an SMTP server program (this method is not recommended if you don’t know what it is) or use an existing SMTP server.

 "If a server now How can I use it if it's not running?" 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's outgoing mail server. For example, If your development computer is a Windows 98 system and uses a 56kbps modem to connect to the Internet via EarthLink, then you can use mail.earthlink.net as your SMTP server. No matter what mail you use for your outgoing mail server Clients (Eudora, Outlook, NetscapeMail, etc.), they will all use the same process as your

PHP codeusing your SMTP server. The trick is to make PHP know a little bit of the truth.

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 displays the current configuration of the system by creating a file. This file includes: Save this file, place it in the file root directory of your Web service program, and then Access it through your browser. You should see a nicely formatted message showing your configuration. The entries you want to view are:

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 are using 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, this is all you have to do. If you are using Windows, You have more things to do. You also need to take a look at the SMTP and sendmail_from values. Don't be confused by the sendmail in the name of the sendmail_from command. Although you are not using a program named Sendmail on Windows, that is just the command The name. Don’t be scared by it.

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 To use your ISP's (EarthLink in this case) outgoing mail server, the email in php.ini should look like this:

SMTP = mail.earthlink.net

You It is also possible to use an IP address instead of a domain name, since computers do not 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 used in the script Modified but 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.

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

Receiver address

Subject

Contents of the message

Other file information headers (optional)

Other configuration options for the SMTP service program (optional)

Additional header parameters control functions such as CC, BCC, Reply- To mail function, 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 For non-Windows systems, 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!";
Copy after login

If you are using a Windows-based SMTP service, then you may not need to use the fifth parameter, and in the append In the header information parameters (that is, the fourth parameter), you need to write them separately - use rn instead of n. Therefore, the code for the same email sent through the Windows-based SMTP service is 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!";
Copy after login

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 no output can be sent to the 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 reached the recipient. The mail() function does not wait for or report success/error codes from the SMTP server.

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 Unable to connect to it. In either case, your email cannot be sent.

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

The above is the detailed content of Detailed explanation of the usage of mail() function in PHP and the working principle of SMTP. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template