继续阅读完整内容
支持我们的网站,请点击查看下方广告
邮件系统现在已经部分修复了。Postfix已经安装并运行,但还存在一些问题:
📊 当前状态分析:
- ✅ Postfix已安装并运行
- ❌ 邮件队列卡住("Mail system is down")
- ❌ 时间同步失败(系统时间错误)
- ✅ 邮件服务已配置
🔧 立即修复方案:
方案1:修复邮件队列和系统时间
#!/bin/bashecho "=== 立即修复邮件系统 ==="
# 1. 立即修复系统时间echo "1. 强制同步系统时间..."sudo systemctl stop systemd-timesyncdsudo apt-get install -y chronysudo chronyd -q "pool ntp.aliyun.com iburst"
# 2. 清理卡住的邮件队列echo "2. 清理邮件队列..."sudo postsuper -d ALLsudo 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 = localhostmydomain = localhostmyorigin = $myhostname
# 网络设置inet_interfaces = loopback-onlyinet_protocols = all
# 目的地mydestination = localhost, localhost.localdomain, $myhostname
# 网络限制mynetworks = 127.0.0.0/8 [::1]/128
# 安全设置smtpd_banner = $myhostname ESMTPbiff = noappend_dot_mydomain = noreadme_directory = no
# 性能mailbox_size_limit = 0recipient_delimiter = +disable_vrfy_command = yesEOF
# 4. 重建别名数据库echo "4. 重建别名数据库..."echo "root: $(whoami)" | sudo tee /etc/aliasessudo newaliases
# 5. 重启服务echo "5. 重启服务..."sudo postfix stopsudo postfix startsudo systemctl restart postfix
# 6. 测试邮件发送echo "6. 测试邮件发送..."echo "测试邮件 $(date)" > /tmp/testmail.txtmail -s "邮件系统测试" root < /tmp/testmail.txt
# 7. 检查状态echo "7. 系统状态检查..."echo "时间: $(date)"echo "Postfix状态:"sudo systemctl status postfix --no-pager -l | head -20echo -e "\n邮件队列:"mailqecho -e "\n端口监听:"sudo netstat -tlnp | grep :25echo -e "\n邮件日志最后10行:"sudo tail -10 /var/log/mail.log 2>/dev/null || echo "等待日志生成..."
echo "=== 修复完成 ==="
🚨 紧急故障排除命令:
# 1. 检查邮件系统状态sudo systemctl status postfixsudo 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
✅ 验证修复是否成功:
- 检查服务状态:
sudo systemctl status postfix# 应该是 active (running)
测试邮件发送:
echo "最终测试 $(date)" | mail -s "最终测试" rootecho "邮件已发送到 root 用户"
检查邮件是否收到:
php -r "mail('root', 'PHP Test', 'Test from PHP', 'From: test@localhost'); echo '发送完成\n';"