🎉 邮件系统现在已经正常工作了!为了让邮件系统更稳定,运行以下优化脚本:

 

#!/bin/bash
echo "=== 邮件系统最终优化 ==="

# 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/aliases
sudo 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 :25
echo -e "\n邮件队列:"
mailq

echo -e "\n=== 优化完成 ==="

📋 验证所有功能:

#!/bin/bash
echo "=== 邮件系统综合测试 ==="

echo "1. 发送三封测试邮件..."
for i in 1 2 3; do
echo "测试邮件 $i - $(date)" | mail -s "综合测试邮件 $i" root
echo " 邮件 $i 已发送"
sleep 1
done

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; then
echo "To: root" > /tmp/test.eml
echo "Subject: sendmail命令测试" >> /tmp/test.eml
echo "From: test@localhost" >> /tmp/test.eml
echo "" >> /tmp/test.eml
echo "这是通过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/bash
echo "=== PHP邮件配置检查 ==="

# 查找所有PHP配置文件
echo "1. 检查PHP配置:"
for phpini in $(find /etc/php -name "php.ini" 2>/dev/null); do
echo "配置文件: $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'
<?php
ini_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/bash
echo "=== 邮件系统维护工具箱 ==="
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 in
1)
echo "=== 查看邮件 ==="
echo "a) 查看所有邮件"
echo "b) 查看最新5封邮件"
echo "c) 搜索特定邮件"
echo -n "选择: "
read mail_choice

case $mail_choice in
a) mail -u root ;;
b) tail -100 /var/mail/root ;;
c)
echo -n "输入搜索关键词: "
read keyword
grep -B2 -A5 "$keyword" /var/mail/root
;;
*) echo "无效选择" ;;
esac
;;
2)
echo "=== 发送测试邮件 ==="
echo -n "输入邮件主题: "
read subject
echo "输入邮件内容(Ctrl+D结束):"
cat | mail -s "$subject" root
echo "邮件已发送到root"
;;
3)
echo "=== 邮件队列状态 ==="
mailq
;;
4)
echo "=== 邮件日志 ==="
echo "a) 查看实时日志"
echo "b) 查看最近20条日志"
echo "c) 查看错误日志"
echo -n "选择: "
read log_choice

case $log_choice in
a) 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 ALL
echo "邮件队列已清理"
;;
6)
echo "=== 服务状态 ==="
sudo systemctl status postfix --no-pager -l
echo -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/bash
echo "=== 邮件系统终极验证 ==="

echo "1. 验证基础功能..."
echo " 发送测试邮件..."
echo "基础功能测试 $(date)" | mail -s "基础功能测试" root
sleep 2

echo "2. 验证sendmail命令..."
cat > /tmp/sendmail_test.txt << 'EOF'
To: root
Subject: Sendmail命令测试
From: sendmail-test@localhost>

这是通过sendmail命令发送的测试邮件。
时间:$(date)
EOF

/usr/sbin/sendmail -t < /tmp/sendmail_test.txt 2>/dev/null
echo " sendmail命令测试完成"
sleep 2

echo "3. 验证邮件队列处理..."
echo "队列测试1" | mail -s "队列测试1" root
echo "队列测试2" | mail -s "队列测试2" root
sleep 1
echo " 当前队列状态:"
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"

 

 


登陆