继续阅读完整内容
支持我们的网站,请点击查看下方广告
🎉 邮件系统现在已经正常工作了!为了让邮件系统更稳定,运行以下优化脚本:
#!/bin/bashecho "=== 邮件系统最终优化 ==="
# 1. 修复Postfix兼容性警告echo "1. 修复兼容性警告..."sudo postconf compatibility_level=3.6
# 2. 优化Postfix配置echo "2. 优化配置..."sudo postconf -e "smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination"sudo postconf -e "smtpd_relay_restrictions = permit_mynetworks, defer_unauth_destination"sudo postconf -e "disable_vrfy_command = yes"sudo postconf -e "strict_rfc821_envelopes = yes"
# 3. 设置正确的邮件名echo "3. 设置邮件名..."echo "localhost.localdomain" | sudo tee /etc/mailname
# 4. 确保别名数据库正确echo "4. 更新别名数据库..."echo "root: $(whoami)" | sudo tee /etc/aliasessudo newaliases
# 5. 重启Postfix使配置生效echo "5. 重启服务..."sudo systemctl restart postfix
# 6. 测试PHP邮件发送echo "6. 测试PHP邮件发送..."cat > /tmp/test_php_mail.php << 'PHP'<?php// 测试PHP的mail()函数$to = "root";$subject = "PHP邮件功能测试";$message = "恭喜!您的邮件系统已修复成功!\n";$message .= "时间:" . date('Y-m-d H:i:s') . "\n";$message .= "系统:" . php_uname() . "\n";$headers = "From: webmaster@localhost";
if (mail($to, $subject, $message, $headers)) {echo "✓ PHP邮件发送成功!\n";echo "请运行 'mail -u root' 查看邮件\n";} else {echo "✗ PHP邮件发送失败\n";echo "错误信息:" . error_get_last()['message'] . "\n";}?>PHP
php /tmp/test_php_mail.php
# 7. 最终状态检查echo -e "\n7. 最终状态检查:"echo "服务状态:"sudo systemctl status postfix --no-pager | grep "Active:"echo -e "\n端口监听:"sudo netstat -tlnp | grep :25echo -e "\n邮件队列:"mailq
echo -e "\n=== 优化完成 ==="
📋 验证所有功能:
#!/bin/bashecho "=== 邮件系统综合测试 ==="
echo "1. 发送三封测试邮件..."for i in 1 2 3; doecho "测试邮件 $i - $(date)" | mail -s "综合测试邮件 $i" rootecho " 邮件 $i 已发送"sleep 1done
echo -e "\n2. 检查邮件队列状态:"mailq
echo -e "\n3. 检查邮件日志:"sudo tail -5 /var/log/mail.log
echo -e "\n4. 检查root邮箱状态:"echo "邮件数量:$(grep -c "^From " /var/mail/root 2>/dev/null || echo 0)"
echo -e "\n5. 测试外部命令邮件:"if command -v sendmail &>/dev/null; thenecho "To: root" > /tmp/test.emlecho "Subject: sendmail命令测试" >> /tmp/test.emlecho "From: test@localhost" >> /tmp/test.emlecho "" >> /tmp/test.emlecho "这是通过sendmail命令发送的测试邮件。" >> /tmp/test.eml/usr/sbin/sendmail -t < /tmp/test.eml 2>/dev/null && echo " sendmail命令测试通过"fi
echo -e "\n=== 测试完成 ==="echo "运行 'mail -u root' 查看所有收到的邮件"
🔧 PHP邮件配置检查:
#!/bin/bashecho "=== PHP邮件配置检查 ==="
# 查找所有PHP配置文件echo "1. 检查PHP配置:"for phpini in $(find /etc/php -name "php.ini" 2>/dev/null); doecho "配置文件: $phpini"grep -i "sendmail_path" "$phpini" || echo " 未找到sendmail_path设置"done
# 检查当前PHP配置echo -e "\n2. 当前PHP配置:"php -i | grep -A2 -B2 "sendmail_path"
# 测试PHP mail()函数echo -e "\n3. 创建PHP测试脚本:"cat > /tmp/test_mail.php << 'EOF'<?phpini_set('display_errors', 1);error_reporting(E_ALL);
echo "测试PHP mail()函数...\n";
// 测试1:简单邮件$sent = mail('root', 'PHP测试邮件', '这是来自PHP的测试内容', 'From: test@localhost');echo "测试1 - 简单邮件: " . ($sent ? "✓ 成功" : "✗ 失败") . "\n";
// 测试2:带HTML内容的邮件$to = "root";$subject = "PHP HTML测试";$message = "<h1>HTML测试</h1><p>这是HTML格式的测试邮件</p>";$headers = "From: web
🚀 现在运行PHP邮件测试:
echo "=== 测试PHP邮件功能 ==="
# 1. 检查PHP配置echo "1. 检查PHP邮件配置:"php -i | grep -A5 "sendmail_path"
# 2. 创建PHP测试脚本cat > /tmp/test_php_email.php << 'PHP'<?php// 测试PHP的mail()函数echo "测试PHP邮件发送功能...\n\n";
$to = "root";$subject = "PHP邮件功能测试 - " . date('Y-m-d H:i:s');$message = "恭喜!PHP邮件功能正常工作!\n\n";$message .= "服务器时间:" . date('Y-m-d H:i:s') . "\n";$message .= "PHP版本:" . phpversion() . "\n";$message .= "服务器:" . php_uname() . "\n\n";$message .= "如果收到此邮件,说明您的PHP邮件系统已完全修复!";$headers = "From: php-test@localhost\r\n";$headers .= "X-Mailer: PHP/" . phpversion();
echo "收件人:$to\n";echo "主题:$subject\n";echo "正在发送...\n";
if (mail($to, $subject, $message, $headers)) {echo "✅ PHP邮件发送成功!\n";echo "请稍等几秒,然后运行 'mail -u root' 查看邮件\n";} else {echo "❌ PHP邮件发送失败\n";$error = error_get_last();if ($error) {echo "错误信息:" . $error['message'] . "\n";}echo "建议检查:\n";echo "1. PHP配置中的sendmail_path\n";echo "2. 邮件日志:tail -f /var/log/mail.log\n";}?>PHP
# 3. 运行PHP测试echo -e "\n2. 运行PHP测试脚本:"php /tmp/test_php_email.php
# 4. 等待邮件处理echo -e "\n3. 等待邮件处理..."sleep 3
# 5. 检查最新邮件echo -e "\n4. 检查最新收到的邮件:"tail -20 /var/mail/root | grep -A5 "PHP邮件功能测试" || echo "邮件可能还在处理中,请稍后检查"
🔧 邮件系统维护命令:
#!/bin/bashecho "=== 邮件系统维护工具箱 ==="echo "请选择要执行的操作:"echo "1. 查看收到的邮件"echo "2. 发送测试邮件"echo "3. 检查邮件队列"echo "4. 查看邮件日志"echo "5. 清理邮件队列"echo "6. 检查服务状态"echo "7. 测试PHP邮件"echo "8. 退出"echo -n "请选择 [1-8]: "
read choice
case $choice in1)echo "=== 查看邮件 ==="echo "a) 查看所有邮件"echo "b) 查看最新5封邮件"echo "c) 搜索特定邮件"echo -n "选择: "read mail_choicecase $mail_choice ina) mail -u root ;;b) tail -100 /var/mail/root ;;c) echo -n "输入搜索关键词: "read keywordgrep -B2 -A5 "$keyword" /var/mail/root;;*) echo "无效选择" ;;esac;;2)echo "=== 发送测试邮件 ==="echo -n "输入邮件主题: "read subjectecho "输入邮件内容(Ctrl+D结束):"cat | mail -s "$subject" rootecho "邮件已发送到root";;3)echo "=== 邮件队列状态 ==="mailq;;4)echo "=== 邮件日志 ==="echo "a) 查看实时日志"echo "b) 查看最近20条日志"echo "c) 查看错误日志"echo -n "选择: "read log_choicecase $log_choice ina) sudo tail -f /var/log/mail.log ;;b) sudo tail -20 /var/log/mail.log ;;c) sudo grep -i "error\|fatal\|warning" /var/log/mail.log | tail -20 ;;*) echo "无效选择" ;;esac;;5)echo "=== 清理邮件队列 ==="sudo postsuper -d ALLecho "邮件队列已清理";;6)echo "=== 服务状态 ==="sudo systemctl status postfix --no-pager -lecho -e "\n端口监听:"sudo netstat -tlnp | grep :25;;7)echo "=== PHP邮件测试 ==="php -r "mail('root', 'PHP手动测试', '测试内容', 'From: test@localhost'); echo '测试邮件已发送\n';";;8)echo "退出"exit 0;;*)echo "无效选择";;esac
📋 最终验证所有功能:
#!/bin/bashecho "=== 邮件系统终极验证 ==="
echo "1. 验证基础功能..."echo " 发送测试邮件..."echo "基础功能测试 $(date)" | mail -s "基础功能测试" rootsleep 2
echo "2. 验证sendmail命令..."cat > /tmp/sendmail_test.txt << 'EOF'To: rootSubject: Sendmail命令测试From: sendmail-test@localhost>
这是通过sendmail命令发送的测试邮件。时间:$(date)EOF
/usr/sbin/sendmail -t < /tmp/sendmail_test.txt 2>/dev/nullecho " sendmail命令测试完成"sleep 2
echo "3. 验证邮件队列处理..."echo "队列测试1" | mail -s "队列测试1" rootecho "队列测试2" | mail -s "队列测试2" rootsleep 1echo " 当前队列状态:"mailq | grep -c "Request" | xargs echo " 队列中的邮件数量:"
echo "4. 验证PHP邮件..."php -r "\$sent = mail('root', 'PHP终极测试', 'PHP邮件功能正常!\n时间: ' . date('Y-m-d H:i:s'), 'From: php@localhost');echo ' PHP邮件: ' . (\$sent ? '✅ 成功' : '❌ 失败') . '\n';"
echo "5. 最终状态检查..."echo " Postfix状态:"sudo systemctl is-active postfix | xargs echo " 服务状态:"echo " 端口监听:"sudo netstat -tlnp | grep :25 | wc -l | xargs echo " 监听端口数:"echo " 邮件存储:"ls -lh /var/mail/root | awk '{print " 文件大小: "$5}'
echo -e "\n=== 验证完成 ==="echo "运行以下命令查看所有邮件:"echo " mail -u root"echo ""echo "或者直接查看邮件文件:"echo " cat /var/mail/root | tail -50"