AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1163233
Accepted
Bastien974
Bastien974
Asked: 2024-07-30 00:59:40 +0800 CST2024-07-30 00:59:40 +0800 CST 2024-07-30 00:59:40 +0800 CST

对 php mail() 的调用未在 postfix 中排队

  • 772

我正在运行 CentOS7、PHP 8.0.30、postfix 2.10.1-9.el7 有时我们尝试通过 php mail() 函数发送的电子邮件不会发送,并且在启用 postfix 的 pickup、cleanup、qmgr、smtp 的详细日志记录后,我们注意到没有任何东西被拾取。

pickup unix n - n 60 1 pickup -v

电子邮件在 mail()(该调用记录在 syslog 中)和 postfix 之间丢失。

Sendmail 在 php.ini 中正确定义

sendmail_path = /usr/sbin/sendmail -t -i

我们的代码完全相同,在池中的另一台服务器上可以完美运行,但在这台服务器上却不行。有什么想法吗?

php
  • 2 2 个回答
  • 104 Views

2 个回答

  • Voted
  1. techieuk
    2024-08-06T16:40:42+08:002024-08-06T16:40:42+08:00

    以下是一些故障排除步骤 -

    1. 检查系统日志中的 PHP 邮件:

      • 确保 mail() 函数在系统日志中正确记录。
    2. 验证 sendmail_path:

      • 再次sendmail_path检查php.ini:
        sendmail_path = /usr/sbin/sendmail -t -i
        
    3. 比较配置:

      • 比较工作服务器和非工作服务器之间的 PHP、Postfix 和服务器配置以识别差异。
    4. 权限:

      • 确保运行 PHP 的用户有执行权限/usr/sbin/sendmail。
    5. Postfix 日志:

      • 启用并检查 Postfix 组件的详细日志记录:
        pickup -v
        cleanup -v
        qmgr -v
        smtp -v
        
    6. 检查邮件队列:

      • 用于mailq检查邮件是否滞留在队列中。
    7. SELinux / AppArmor:

      • 确保 SELinux 或 AppArmor 没有限制sendmail执行。
    8. 防火墙/网络:

      • 确保没有防火墙规则或网络问题阻止电子邮件发送。
    9. 重启服务:

      • 重新启动 Postfix 和 PHP-FPM/Apache 以确保配置更改生效:
        systemctl restart postfix
        systemctl restart php-fpm
        
    10. 测试直接 Sendmail:

      • 尝试直接使用 sendmail 发送测试电子邮件:
        echo "Subject: Test" | /usr/sbin/sendmail -v [email protected]
        

    通过系统地检查这些区域,您应该能够识别并解决问题。

    • 3
  2. Best Answer
    Bastien974
    2024-08-09T22:10:04+08:002024-08-09T22:10:04+08:00

    事实证明,通过禁用(看起来完全不相关的) grpc 选项,问题不再发生。

    /etc/php.d/40-grpc.ini
        #grpc.enable_fork_support = 1
    
    • 0

相关问题

  • 用户特定的 Php.ini 当 php 作为模块运行时?

  • 使 php mail() 函数在 ubuntu-server 上工作的步骤是什么?

  • Web 服务器和数据库服务器位于完全不同的位置

  • PHP 作为 CGI 还是 Apache 模块?

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve