如何使用 PHP mail() 函数发送电子邮件

什么是 PHP mail?

PHP mail 是内置的 PHP 函数,用于从 PHP 脚本发送电子邮件。

mail 函数接受以下参数

  • 电子邮件地址
  • 主题
  • 消息
  • 抄送或密送电子邮件地址

  • 这是一种经济高效的方式,用于在重要事件上通知用户。
  • 通过在网站上提供联系我们表单,让用户通过电子邮件与您联系,该表单会将提供的内容发送到电子邮件。
  • 开发人员可以使用它通过电子邮件接收系统错误
  • 您可以使用它向您的 Newsletter 订阅者发送电子邮件。
  • 您可以使用它向忘记密码的用户发送密码重置链接
  • 您可以使用它发送激活/确认链接。这在注册用户和验证其电子邮件地址时很有用

为什么/何时使用 mail PHP

使用 PHP 发送邮件

PHP mail 函数具有以下基本语法

<?php
mail($to_email_address,$subject,$message,[$headers],[$parameters]);
?>

此处,

  • “$to_email_address” 是收件人的电子邮件地址
  • “$subject” 是电子邮件主题
  • “$message” 是要发送的消息。
  • “[$headers]” 是可选的,可用于包含抄送、密送等信息

    • CC 是抄送的缩写。当您想将副本发送给相关人员时使用,例如发送给公司的投诉电子邮件也可以作为抄送发送给投诉委员会。
    • BCC 是密送的缩写。它与 CC 类似。包含在 BCC 部分中的电子邮件地址不会显示给其他收件人。

简单邮件传输协议 (SMTP)

PHP mailer 使用简单邮件传输协议 (SMTP) 发送邮件。

在托管服务器上,SMTP 设置已预先配置好。

SMTP 邮件设置可以从 PHP 安装文件夹中的 “php.ini” 文件进行配置。

在本地主机上配置 SMTP 设置 假设您使用的是 Windows 上的 xampp,请在目录 “C:\xampp\php” 中找到 “php.ini”。

  • 使用记事本或任何文本编辑器打开它。在此示例中,我们将使用记事本。点击编辑菜单

Simple Mail Transmission Protocol

  • 点击“查找…”菜单

Simple Mail Transmission Protocol

  • 将出现查找对话框菜单

Simple Mail Transmission Protocol

  • 点击“查找下一个”按钮

Simple Mail Transmission Protocol

  • 找到条目

    • [mail function]
    • ; XAMPP: 如果您想使用 Mercury 等 SMTP 服务器,请勿删除分号
    • ; SMTP = localhost
    • ; smtp_port = 25
    • 删除 SMTP 和 smtp_port 前面的分号,并将 SMTP 设置为您的 smtp 服务器,并将端口设置为您的 smtp 端口。您的设置应如下所示

      • SMTP = smtp.example.com
      • smtp_port = 25
      • 请注意,SMTP 设置可以从您的网站托管提供商处获取。
      • 如果服务器需要身份验证,则添加以下行。

        • auth_username = example_username@example.com
        • auth_password = example_password
        • 保存新更改。
        • 重启 Apache 服务器。

PHP 邮件示例

现在让我们看一个发送简单邮件的示例。

<?php     
$to_email = 'name @ company . com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply @ company . com';
mail($to_email,$subject,$message,$headers);
?>

输出

Simple Mail Transmission Protocol

注意:上面的示例只接受了 4 个必需的参数。

您应该用真实的电子邮件地址替换上面虚构的电子邮件地址。

清理电子邮件用户输入

为了简单起见,上面的示例在源代码中使用了硬编码的值作为电子邮件地址和其他详细信息。

假设您需要创建一个联系我们表单供用户填写详细信息然后提交。

  • 用户可能会意外或故意在标头中注入代码,这可能导致发送垃圾邮件
  • 为了保护您的系统免受此类攻击,您可以创建一个自定义函数,在发送邮件之前对值进行清理和验证。

让我们创建一个自定义函数,使用 filter_var 内置函数来验证和清理电子邮件地址。

Filter_var 函数 filter_var 函数用于清理和验证用户输入数据。

它具有以下基本语法。

<?php
filter_var($field, SANITIZATION TYPE);
?>

此处,

  • “filter_var(…)” 是验证和清理函数
  • “$field” 是要过滤的字段的值。
  • “SANITIZATION TYPE” 是要对字段执行的清理类型,例如:

    • FILTER_VALIDATE_EMAIL – 对有效的电子邮件地址返回 true,对无效的电子邮件地址返回 false。
    • FILTER_SANITIZE_EMAIL – 从电子邮件地址中删除非法字符。 info\@domain.(com) 返回 info@domain.com。
    • FILTER_SANITIZE_URL – 从 URL 中删除非法字符。 http://www.example@.comé 返回 >http://www.example@.com
    • FILTER_SANITIZE_STRING – 从字符串值中删除标签。 <b>am bold</b> 变为 am bold。

下面的代码实现了使用自定义函数发送安全邮件。

<?php 
function sanitize_my_email($field) {
    $field = filter_var($field, FILTER_SANITIZE_EMAIL);
    if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
        return true;
    } else {
        return false;
    }
}
$to_email = 'name @ company . com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail ';
$headers = 'From: noreply @ company. com';
//check if the email address is invalid $secure_check
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
    echo "Invalid input";
} else { //send email 
    mail($to_email, $subject, $message, $headers);
    echo "This email is sent using PHP Mail";
}
?>

输出

Sanitizing email user inputs

安全邮件

电子邮件在传输过程中可能会被非预期收件人拦截。

这可能会将电子邮件内容暴露给非预期收件人。

安全邮件通过超文本传输协议安全 (HTTPS) 传输电子邮件来解决此问题。

HTTPS 在发送前加密消息。

摘要

  • PHP 内置函数 mail() 用于从 PHP 脚本发送邮件
  • 对数据进行验证和清理检查对于发送安全邮件至关重要
  • PHP 内置函数 filter_var() 提供了一种易于使用且高效的数据清理和验证方法