通过 PHP 的 Sendmail 受限:如何监控并避免邮件发送问题

使用简单 PHP 函数(如 mail())发送邮件,看似是联系表单或网站通知的简便方案。然而,这种方法非常陈旧,在 安全性与送达率 方面存在 严重限制

通过 php mail() 发送的邮件往往 缺少正确的认证头,这使其更可能被接收服务器 标记为垃圾邮件或直接拒绝

为解决此问题并保护我们服务的完整性,我们对通过 PHP 发送的非认证邮件实施了特定限制。

了解限制

为维持高邮件送达率标准并防止滥用,Hostinger 限制了通过 php mail() 等非认证方式发送的邮件。这些措施旨在:

  • 保护邮件信誉:以此方式发送的邮件通常会跳过必要的认证(SPF、DKIM 和 DMARC)检查,使这些邮件更可能被过滤为垃圾邮件。
  • 确保安全:垃圾邮件发送者常利用基础 PHP mail 函数发送批量邮件。通过要求更强的认证方式,我们帮助你和用户免受侵害。

因此,如果你使用 php mail() 或类似的简单邮件函数,当超过以下限制时,可能会发现部分邮件未按预期送达:

  • 每分钟:最多 10 封
  • 每日:最多 100 封

如何改善邮件发送

我们强烈建议通过 SMTP(一种更安全且经过认证的方式)发送邮件,而非使用基础 PHP 函数。有两种简单方式:

  • PHPMailer 或类似库 如何使用 PHPMailer 发送邮件
  • SMTP 插件,例如 WP Mail SMTP 什么是 WordPress SMTP… 或 Laravel 的 Mail

由于 SMTP 包含正确的认证,它能提高邮件进入收件箱的概率,同时遵守邮件套餐的外发限制。如果你使用我们的 Business Starter 或 Business Premium 邮箱,每日外发邮件的限制至少提高 10 倍,这意味着你的网站有更多咨询机会。

通过 sendmail 日志进行监控

如果你通过 PHP 脚本发送邮件,监控发送数量至关重要,尤其是在触及限制时。

为此,每个主机账户现在都包含 Sendmail 速率限制日志。该日志可让你:

  • 查看哪些邮箱地址发送量最大
  • 检查何时触发了速率限制
  • 跟踪速率回落到正常水平的快慢

该日志可在你的 文件管理器 中获取,并每小时自动更新。日志路径:

/home/username/.logs/exim.log

输出示例:

[2025-05-13 03:17:22] RATE LIMIT EXCEEDED - Mailbox: email@domain.com - Rate: 2935.7 (daily)
[2025-05-13 03:17:22] RATE LIMIT EXCEEDED - Mailbox: noreply@domain.com - Rate: 2936.7 (daily)

如何使用日志:

  • 时间戳: [2025-05-13 03:17:22]
  • 邮箱: email@domain.com
  • 发送速率: 2935.7
  • 限制类型:(每日 或 每分钟)

这意味着 email@domain.com 以 2935.7 封/天的速率发送,超过了每日 100 封的限制。

限制如何重置

速率限制会随发送活动减缓而 逐步重置。例如:

  • 如果一段时间未发送邮件,速率会下降。当账户接近合规时,你会看到更少的 “RATE LIMIT EXCEEDED” 行。
  • 一旦速率降到允许的限制(100/天10/分钟)以下,限制会自动解除。

💡 提示:长期查看日志可帮助你:

  • 识别哪些邮箱账户发送量最大
  • 发现发送高峰时段
  • 了解限制何时接近重置

这有助于你及时采取行动——将大流量账户切换到 SMTP,或调整自动邮件的发送时间。

来源:Hostinger 官方帮助文档