邮件系统现在已经部分修复了。Postfix已经安装并运行,但还存在一些问题:

📊 当前状态分析:

  1. ✅ Postfix已安装并运行
  2. ❌ 邮件队列卡住("Mail system is down")
  3. ❌ 时间同步失败(系统时间错误)
  4. ✅ 邮件服务已配置

 

🔧 立即修复方案:

方案1:修复邮件队列和系统时间

#!/bin/bash
echo "=== 立即修复邮件系统 ==="

# 1. 立即修复系统时间
echo "1. 强制同步系统时间..."
sudo systemctl stop systemd-timesyncd
sudo apt-get install -y chrony
sudo chronyd -q "pool ntp.aliyun.com iburst"

# 2. 清理卡住的邮件队列
echo "2. 清理邮件队列..."
sudo postsuper -d ALL
sudo rm -f /var/spool/postfix/deferred/*
sudo rm -f /var/spool/postfix/active/*
sudo rm -f /var/spool/postfix/maildrop/*

# 3. 修复Postfix配置
echo "3. 修复Postfix配置..."
sudo tee /etc/postfix/main.cf << 'EOF'
# 基本配置
myhostname = localhost
mydomain = localhost
myorigin = $myhostname

# 网络设置
inet_interfaces = loopback-only
inet_protocols = all

# 目的地
mydestination = localhost, localhost.localdomain, $myhostname

# 网络限制
mynetworks = 127.0.0.0/8 [::1]/128

# 安全设置
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
readme_directory = no

# 性能
mailbox_size_limit = 0
recipient_delimiter = +
disable_vrfy_command = yes
EOF

# 4. 重建别名数据库
echo "4. 重建别名数据库..."
echo "root: $(whoami)" | sudo tee /etc/aliases
sudo newaliases

# 5. 重启服务
echo "5. 重启服务..."
sudo postfix stop
sudo postfix start
sudo systemctl restart postfix

# 6. 测试邮件发送
echo "6. 测试邮件发送..."
echo "测试邮件 $(date)" > /tmp/testmail.txt
mail -s "邮件系统测试" root < /tmp/testmail.txt

# 7. 检查状态
echo "7. 系统状态检查..."
echo "时间: $(date)"
echo "Postfix状态:"
sudo systemctl status postfix --no-pager -l | head -20
echo -e "\n邮件队列:"
mailq
echo -e "\n端口监听:"
sudo netstat -tlnp | grep :25
echo -e "\n邮件日志最后10行:"
sudo tail -10 /var/log/mail.log 2>/dev/null || echo "等待日志生成..."

echo "=== 修复完成 ==="

🚨 紧急故障排除命令:

# 1. 检查邮件系统状态
sudo systemctl status postfix
sudo journalctl -u postfix -n 50

# 2. 手动处理邮件队列
sudo postqueue -p # 查看队列
sudo postqueue -f # 刷新队列
sudo postsuper -d ALL # 删除所有队列

# 3. 测试SMTP连接
echo "QUIT" | telnet localhost 25
# 应该看到 "220 localhost ESMTP"

# 4. 检查邮件日志
sudo tail -f /var/log/mail.log

# 5. 检查用户邮箱
sudo ls -la /var/mail/
sudo cat /var/mail/root 2>/dev/null

📝 PHP邮件测试脚本:

创建测试文件 /tmp/test_php_mail.php:

<?php
// 测试PHP邮件发送
$to = "root";
$subject = "PHP邮件测试";
$message = "这是一封来自PHP的测试邮件\n时间:" . date('Y-m-d H:i:s');
$headers = "From: webmaster@localhost";

if (mail($to, $subject, $message, $headers)) {
echo "PHP邮件发送成功!\n";
echo "请检查 /var/mail/root\n";
} else {
echo "PHP邮件发送失败\n";

// 检查配置
echo "\n检查配置:\n";
echo "sendmail_path: " . ini_get('sendmail_path') . "\n";

// 测试命令行发送
echo "\n测试命令行发送...\n";
system('echo "命令行测试" | mail -s "命令行测试" root 2>&1');
}
?>

运行测试:

php /tmp/test_php_mail.php

✅ 验证修复是否成功:

  1. 检查服务状态

sudo systemctl status postfix
# 应该是 active (running)

测试邮件发送

echo "最终测试 $(date)" | mail -s "最终测试" root
echo "邮件已发送到 root 用户"

检查邮件是否收到

php -r "mail('root', 'PHP Test', 'Test from PHP', 'From: test@localhost'); echo '发送完成\n';"

 


登陆