Home  >  Article  >  Backend Development  >  Use PHP to send emails

Use PHP to send emails

PHPz
PHPzOriginal
2023-06-11 08:46:441725browse

With the popularity of the Internet and email, more and more people are beginning to use email as their main communication tool. PHP is a popular server-side programming language that can also be used to send emails. In this article, we will explain how to use PHP to send emails.

  1. Configure SMTP server

First, we need to configure the SMTP server. SMTP (Simple Mail Transfer Protocol) is the standard protocol for email transmission. Most email service providers will provide SMTP server setup information. In PHP, you need to use an SMTP server to send emails, so we need to configure the SMTP server setting information in the code, including the SMTP server address, port number, user name and password, etc.

The following is an example of using Gmail SMTP server:

<?php
// 配置SMTP服务器
$smtp_server = 'smtp.gmail.com';
$smtp_port = 587;
$smtp_username = '你的Gmail账号';
$smtp_password = '你的Gmail密码';

// 创建SMTP客户端
$smtp_client = new SMTPClient($smtp_server, $smtp_port, $smtp_username, $smtp_password);

// 发送邮件
$smtp_client->sendMail('发件人邮箱', '收件人邮箱', '邮件标题', '邮件内容');
?>
  1. Create SMTP client

In PHP, we need to use SMTP client to Connect to SMTP server and send email. Here is an example of an SMTP client:

class SMTPClient {
  private $smtp_server;
  private $smtp_port;
  private $smtp_username;
  private $smtp_password;
  private $smtp_conn;

  public function __construct($smtp_server, $smtp_port, $smtp_username, $smtp_password) {
    $this->smtp_server = $smtp_server;
    $this->smtp_port = $smtp_port;
    $this->smtp_username = $smtp_username;
    $this->smtp_password = $smtp_password;

    // 连接SMTP服务器
    $this->smtp_conn = fsockopen($this->smtp_server, $this->smtp_port, $errno, $errstr, 30);

    if (!$this->smtp_conn) {
      throw new Exception("无法连接SMTP服务器: $errstr ($errno)");
    }

    // 连接成功后发送命令
    $this->sendCommand('EHLO localhost', 250);
    $this->sendCommand("AUTH LOGIN", 334);
    $this->sendCommand(base64_encode($this->smtp_username), 334);
    $this->sendCommand(base64_encode($this->smtp_password), 235);
  }

  // 发送邮件函数
  public function sendMail($from, $to, $subject, $body) {
    // 发送邮件头部
    $this->sendCommand("MAIL FROM: <$from>", 250);
    $this->sendCommand("RCPT TO: <$to>", 250);
    $this->sendCommand("DATA", 354);

    // 发送邮件内容
    fputs($this->smtp_conn, "Subject: $subject
");
    fputs($this->smtp_conn, "From: $from
");
    fputs($this->smtp_conn, "To: $to
");
    fputs($this->smtp_conn, "
");
    fputs($this->smtp_conn, "$body
");
    fputs($this->smtp_conn, ".
");

    // 发送结束命令
    $this->sendCommand("QUIT", 221);
  }

  // 发送SMTP命令
  private function sendCommand($command, $expected_response) {
    fputs($this->smtp_conn, "$command
");

    // Read response
    while(true) {
      $response = fgets($this->smtp_conn, 4096);
      if(substr($response, 3, 1) == " ") { break; }
    }

    if((int)substr($response, 0, 3) !== $expected_response) {
      throw new Exception("SMTP命令错误: " . $response);
    }
  }

  public function __destruct() {
    fclose($this->smtp_conn);
  }
}
  1. Send Email

Sending an email using an SMTP client is very simple. You only need to call the sendMail function of the SMTP client and pass in the sender's email address, recipient's email address, email title and email content.

$smtp_client->sendMail('发件人邮箱', '收件人邮箱', '邮件标题', '邮件内容');

Now you can use PHP to send emails. Of course, this is just a basic example, and actual applications may require more complex logic, such as adding attachments, sending HTML emails, etc.

Summary

In this article, we introduced how to use PHP to send emails. To send emails using PHP, we need to configure the SMTP server information first, and then use an SMTP client to connect to the SMTP server and send emails. Hopefully this article will help you better understand the fundamentals of sending emails in PHP.

The above is the detailed content of Use PHP to send emails. For more information, please follow other related articles on the PHP Chinese website!

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