PHP E-mail学习笔记

一、发送邮件

PHP提供了mail()函数来发送邮件。

mail()函数的语法如下:

phpCopy Code
mail($to, $subject, $message, $headers, $parameters);

参数说明:

  • $to: 收件人邮件地址(可以是单个邮箱,也可以是数组)
  • $subject: 邮件主题
  • $message: 邮件正文
  • $headers: 邮件头部信息,用于设置附件、CC、BCC、回复地址等参数,可以为空
  • $parameters: 额外的命令行参数,可选参数,可以为空

例如,我们要发送一封简单的邮件给单个收件人:

phpCopy Code
$to = 'recipient@example.com'; $subject = 'Test email'; $message = 'Hello, this is a test email!'; $headers = 'From: sender@example.com'; mail($to, $subject, $message, $headers);

以上代码将会发送一封来自sender@example.com的测试邮件给recipient@example.com

如果需要发送给多个收件人,可以将多个邮件地址放在一个数组中传递给$to参数,例如:

phpCopy Code
$to = array('recipient1@example.com', 'recipient2@example.com'); $subject = 'Test email'; $message = 'Hello, this is a test email!'; $headers = 'From: sender@example.com'; mail(implode(', ', $to), $subject, $message, $headers);

以上代码将会发送一封来自sender@example.com的测试邮件给recipient1@example.comrecipient2@example.com。注意,$to参数中多个邮件地址之间要用逗号加一个空格分隔。

二、使用SMTP服务器发送邮件

使用mail()函数发送邮件需要依赖本地的邮件系统,这种方式存在一定的局限性。因此,我们可以使用SMTP服务器来发送邮件,这样可以更加灵活地发送邮件。

PHP提供了PHPMailer库来帮助我们使用SMTP服务器发送邮件。

首先,我们需要下载并引入PHPMailer库。可以从官网下载最新版本的库文件,也可以使用Composer安装。

然后,我们就可以使用PHPMailer库来发送邮件了。下面是一个例子:

phpCopy Code
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; require 'vendor/autoload.php'; // 实例化PHPMailer类 $mail = new PHPMailer(); // 配置SMTP服务器 $mail->isSMTP(); $mail->Host = 'smtp.example.com'; // SMTP服务器地址 $mail->SMTPAuth = true; // 启用SMTP验证 $mail->Username = 'username'; // SMTP用户名 $mail->Password = 'password'; // SMTP密码 $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 加密方式 $mail->Port = 587; // SMTP端口号 // 设置发件人和收件人 $mail->setFrom('sender@example.com', 'Sender Name'); $mail->addAddress('recipient@example.com', 'Recipient Name'); // 设置邮件主题和正文 $mail->Subject = 'Test email'; $mail->Body = 'Hello, this is a test email!'; // 发送邮件 if (!$mail->send()) { echo '邮件发送失败:' . $mail->ErrorInfo; } else { echo '邮件发送成功!'; }

以上代码将会使用SMTP服务器smtp.example.com来发送一封测试邮件。注意,需要替换HostUsernamePassword等参数为实际的SMTP服务器地址、用户名和密码。

三、发送带附件的邮件

如果需要发送带附件的邮件,可以使用PHPMailer库提供的addAttachment()方法来添加附件。下面是一个例子:

phpCopy Code
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; require 'vendor/autoload.php'; // 实例化PHPMailer类 $mail = new PHPMailer(); // 配置SMTP服务器... // 设置发件人和收件人... // 设置邮件主题和正文... // 添加附件 $mail->addAttachment('/path/to/file.pdf', 'document.pdf'); // 发送邮件...

以上代码将会发送一封带有附件/path/to/file.pdf的测试邮件。

四、常见问题与解决方法

  1. 报错Could not instantiate mail function.

这个错误通常是由于没有配置本地邮件服务或者邮件服务没有启动所导致的。可以在php.ini文件中设置sendmail_path参数来指定本地邮件服务的位置。

另外,有些虚拟主机提供商可能禁用了邮件函数。如果是这种情况,可以考虑使用SMTP服务器发送邮件。

  1. 报错SMTP Error: Could not authenticate.

这个错误通常是由于SMTP用户名或密码不正确所导致的。需要检查SMTP用户名和密码是否正确,并确保SMTP服务器支持该验证方式。

  1. 邮件被认为是垃圾邮件

这个问题通常是由于邮件头部信息不完整或者邮件内容被识别为垃圾邮件所导致的。可以通过设置合适的邮件头部信息、避免使用敏感词汇和添加反垃圾邮件标记等方式来解决这个问题。