You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux端Sendmail取消特定Windows服务器认证需求的方法求助

解决Windows PHP连接Linux Sendmail时的认证要求问题

你的核心需求是让Linux上的Sendmail服务器允许Windows 2016服务器无需认证就能发送邮件,而不是在PHP端强行使用认证。下面是具体的操作步骤:

一、修改Linux Sendmail的访问控制配置(关键步骤)

Sendmail默认会对SMTP请求做认证检查,我们需要把你的Windows服务器IP加入免认证的中继白名单:

  1. 编辑Sendmail的访问控制文件
    打开终端执行命令:
    vi /etc/mail/access
    
  2. 添加免认证规则
    在文件末尾新增一行,替换为你的Windows服务器实际IP:
    192.168.x.x RELAY
    
    这行规则表示允许该IP的主机直接中继邮件,无需认证。
  3. 生成访问控制数据库
    Sendmail需要将文本格式的access文件转换为哈希数据库才能识别,执行:
    makemap hash /etc/mail/access < /etc/mail/access
    
  4. 重启Sendmail服务
    根据Linux系统类型执行重启命令:
    # Systemd系统(CentOS 7+/Ubuntu 16.04+)
    systemctl restart sendmail
    # 旧版SysVinit系统
    service sendmail restart
    

二、调整PHP.ini配置(移除认证信息)

既然Sendmail已经允许Windows服务器免认证,PHP端就不需要再保留账号密码配置了,修改php.ini的[mail function]段:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = admin.site.com
; http://php.net/smtp-port
smtp_port = 587
; 注释或删除认证相关配置
; auth_username = name
; auth_password = password

修改后记得重启Web服务(如IIS或Apache)让配置生效。

额外注意事项

  • 如果Sendmail在587端口强制要求TLS加密,可在PHP.ini中添加smtp_ssl = tls配置(仅用于加密传输,和认证无关)。
  • 若使用Sendmail的submit.cf配置文件,需确认该文件已引用access数据库,确保规则生效。
  • 可以用以下简单PHP脚本测试是否生效:
    <?php
    $to = "test@example.com";
    $subject = "Test Mail";
    $message = "这是一封无需认证的测试邮件。";
    $headers = "From: sender@yourdomain.com";
    
    if(mail($to,$subject,$message,$headers)){
        echo "邮件发送成功!";
    } else {
        echo "邮件发送失败。";
    }
    ?>
    

内容的提问来源于stack exchange,提问作者sjw0525

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:31:17