You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

313 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* SMTP管理界面
* 提供WordPress后台的SMTP配置界面
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
// 包含诊断工具
require_once __DIR__ . '/smtp-diagnostic.php';
/**
* 添加SMTP设置菜单
*/
function nenghui_add_smtp_menu() {
add_options_page(
'SMTP邮件设置',
'SMTP设置',
'manage_options',
'nenghui-smtp-settings',
'nenghui_smtp_settings_page'
);
}
add_action('admin_menu', 'nenghui_add_smtp_menu');
/**
* 注册SMTP设置选项
*/
function nenghui_register_smtp_settings() {
// 注册SMTP设置选项
register_setting('nenghui_smtp_settings', 'nenghui_smtp_host');
register_setting('nenghui_smtp_settings', 'nenghui_smtp_port');
register_setting('nenghui_smtp_settings', 'nenghui_smtp_username');
register_setting('nenghui_smtp_settings', 'nenghui_smtp_password');
register_setting('nenghui_smtp_settings', 'nenghui_smtp_secure');
register_setting('nenghui_smtp_settings', 'nenghui_smtp_from_email');
register_setting('nenghui_smtp_settings', 'nenghui_smtp_from_name');
}
add_action('admin_init', 'nenghui_register_smtp_settings');
/**
* SMTP设置页面
*/
function nenghui_smtp_settings_page() {
// 处理表单提交
if (isset($_POST['submit'])) {
// 验证nonce
if (!wp_verify_nonce($_POST['_wpnonce'], 'nenghui_smtp_settings-options')) {
wp_die('安全验证失败');
}
// 保存设置
update_option('nenghui_smtp_host', sanitize_text_field($_POST['nenghui_smtp_host']));
update_option('nenghui_smtp_port', intval($_POST['nenghui_smtp_port']));
update_option('nenghui_smtp_username', sanitize_text_field($_POST['nenghui_smtp_username']));
update_option('nenghui_smtp_password', sanitize_text_field($_POST['nenghui_smtp_password']));
update_option('nenghui_smtp_secure', sanitize_text_field($_POST['nenghui_smtp_secure']));
update_option('nenghui_smtp_from_email', sanitize_email($_POST['nenghui_smtp_from_email']));
update_option('nenghui_smtp_from_name', sanitize_text_field($_POST['nenghui_smtp_from_name']));
echo '<div class="notice notice-success is-dismissible"><p>设置已保存!</p></div>';
}
// 获取当前设置
$smtp_host = get_option('nenghui_smtp_host', '');
$smtp_port = get_option('nenghui_smtp_port', '587');
$smtp_username = get_option('nenghui_smtp_username', '');
$smtp_password = get_option('nenghui_smtp_password', '');
$smtp_secure = get_option('nenghui_smtp_secure', 'tls');
$smtp_from_email = get_option('nenghui_smtp_from_email', get_option('admin_email'));
$smtp_from_name = get_option('nenghui_smtp_from_name', get_bloginfo('name'));
?>
<div class="wrap">
<h1>SMTP邮件设置</h1>
<div class="nenghui-smtp-admin">
<form method="post" action="">
<?php wp_nonce_field('nenghui_smtp_settings-options'); ?>
<h2>SMTP服务器设置</h2>
<p class="description">配置SMTP服务器以确保邮件能够正常发送。如果不配置SMTP将使用服务器默认的邮件发送方式。</p>
<table class="form-table">
<tbody>
<tr>
<th scope="row">SMTP主机</th>
<td>
<input type="text" name="nenghui_smtp_host" value="<?php echo esc_attr($smtp_host); ?>" class="regular-text" placeholder="smtp.gmail.com">
<p class="description">SMTP服务器地址例如smtp.gmail.com, smtp.qq.com</p>
</td>
</tr>
<tr>
<th scope="row">SMTP端口</th>
<td>
<input type="number" name="nenghui_smtp_port" value="<?php echo esc_attr($smtp_port); ?>" class="small-text" id="smtp_port_input">
<p class="description">通常为 587 (TLS) 或 465 (SSL)</p>
<div id="port_25_warning" style="display:none; background:#fff3cd; border:1px solid #ffeaa7; padding:10px; margin-top:5px; border-radius:4px;">
<strong style="color:#856404;">⚠️ 端口25警告</strong><br>
大多数云服务商阿里云、腾讯云等默认封禁端口25建议使用<br>
• 端口587 + TLS加密推荐<br>
• 端口465 + SSL加密
</div>
<script>
document.getElementById('smtp_port_input').addEventListener('input', function() {
var warning = document.getElementById('port_25_warning');
if (this.value == '25') {
warning.style.display = 'block';
} else {
warning.style.display = 'none';
}
});
// 页面加载时检查
if (document.getElementById('smtp_port_input').value == '25') {
document.getElementById('port_25_warning').style.display = 'block';
}
</script>
</td>
</tr>
<tr>
<th scope="row">加密方式</th>
<td>
<select name="nenghui_smtp_secure">
<option value="tls" <?php selected($smtp_secure, 'tls'); ?>>TLS</option>
<option value="ssl" <?php selected($smtp_secure, 'ssl'); ?>>SSL</option>
<option value="none" <?php selected($smtp_secure, 'none'); ?>>无加密</option>
</select>
<p class="description">推荐使用 TLS 或 SSL</p>
</td>
</tr>
<tr>
<th scope="row">SMTP用户名</th>
<td>
<input type="text" name="nenghui_smtp_username" value="<?php echo esc_attr($smtp_username); ?>" class="regular-text" placeholder="your-email@gmail.com">
<p class="description">通常是您的邮箱地址</p>
</td>
</tr>
<tr>
<th scope="row">SMTP密码</th>
<td>
<input type="password" name="nenghui_smtp_password" value="<?php echo esc_attr($smtp_password); ?>" class="regular-text">
<p class="description"><strong style="color:red;">重要提示:</strong>大多数邮箱服务需要使用<strong>授权码</strong>而不是登录密码!<br>
• 阿里云邮箱:必须使用授权码<br>
• QQ邮箱需要开启SMTP并使用授权码<br>
• Gmail需要使用应用专用密码</p>
</td>
</tr>
<tr>
<th scope="row">发件人邮箱</th>
<td>
<input type="email" name="nenghui_smtp_from_email" value="<?php echo esc_attr($smtp_from_email); ?>" class="regular-text">
<p class="description">邮件的发件人邮箱地址</p>
</td>
</tr>
<tr>
<th scope="row">发件人姓名</th>
<td>
<input type="text" name="nenghui_smtp_from_name" value="<?php echo esc_attr($smtp_from_name); ?>" class="regular-text">
<p class="description">邮件的发件人显示名称</p>
</td>
</tr>
</tbody>
</table>
<?php submit_button('保存设置'); ?>
</form>
<div class="nenghui-smtp-test">
<h2>测试SMTP连接</h2>
<p>点击下面的按钮发送测试邮件验证SMTP配置是否正确。</p>
<p><strong>测试邮件将发送到:</strong><?php echo esc_html(get_option('admin_email')); ?></p>
<p>
<a href="<?php echo admin_url('options-general.php?page=nenghui-smtp-settings&nenghui_smtp_diagnostic=1'); ?>" class="button button-primary">系统诊断</a>
<a href="<?php echo admin_url('options-general.php?page=nenghui-smtp-settings&nenghui_test_smtp_connection=1'); ?>" class="button button-secondary" style="margin-left: 10px;">测试连接</a>
<a href="<?php echo admin_url('options-general.php?page=nenghui-smtp-settings&nenghui_test_smtp=1'); ?>" class="button button-secondary" style="margin-left: 10px;">发送测试邮件</a>
</p>
<p class="description">
<strong>系统诊断:</strong>检查服务器环境和PHP扩展支持<br>
<strong>测试连接:</strong>验证能否连接到SMTP服务器<br>
<strong>发送测试邮件:</strong>实际发送一封测试邮件
</p>
<div class="smtp-test-tips" style="margin-top: 15px; padding: 10px; background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px;">
<h4 style="margin-top: 0;">测试前请确认:</h4>
<ul style="margin: 5px 0;">
<li>所有SMTP配置项都已正确填写</li>
<li>邮箱服务商已开启SMTP服务</li>
<li>使用的是正确的密码Gmail等需要应用专用密码</li>
<li>服务器网络可以访问SMTP服务器</li>
</ul>
</div>
</div>
<div class="nenghui-smtp-help">
<h2>常用SMTP配置</h2>
<div class="smtp-providers">
<div class="provider">
<h3>Gmail</h3>
<ul>
<li>主机: smtp.gmail.com</li>
<li>端口: 587</li>
<li>加密: TLS</li>
<li>注意: 需要开启两步验证并使用应用专用密码</li>
</ul>
</div>
<div class="provider">
<h3>QQ邮箱</h3>
<ul>
<li>主机: smtp.qq.com</li>
<li>端口: 587 或 465</li>
<li>加密: TLS 或 SSL</li>
<li>注意: 需要开启SMTP服务并获取授权码</li>
</ul>
</div>
<div class="provider">
<h3>163邮箱</h3>
<ul>
<li>主机: smtp.163.com</li>
<li>端口: 587 或 465</li>
<li>加密: TLS 或 SSL</li>
<li>注意: 需要开启SMTP服务并使用授权码</li>
</ul>
</div>
<div class="provider">
<h3>阿里云邮箱</h3>
<ul>
<li>主机: smtp.mxhichina.com</li>
<li>端口: 587 或 465</li>
<li>加密: TLS 或 SSL</li>
<li style="color:red;"><strong>重要: 必须使用授权码,不能使用登录密码!</strong></li>
<li>获取授权码: 登录阿里云邮箱 → 设置 → 账户安全 → 生成授权码</li>
</ul>
</div>
<div class="provider">
<h3>hMailServer 自建邮箱</h3>
<ul>
<li>主机: 您的邮件服务器域名或IP</li>
<li>端口: 25 (无加密) / 587 (TLS) / 465 (SSL)</li>
<li>加密: 根据服务器配置选择 None/TLS/SSL</li>
<li>用户名: 完整邮箱地址或用户名</li>
<li>密码: 邮箱账户密码</li>
<li style="color:blue;"><strong>提示:</strong> 确保hMailServer已启用SMTP服务</li>
<li>常见端口: 25(标准), 587(提交), 465(SSL)</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<style>
.nenghui-smtp-admin .smtp-providers {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin-top: 15px;
}
.nenghui-smtp-admin .provider {
background: #f9f9f9;
padding: 15px;
border-radius: 5px;
border-left: 4px solid #0073aa;
}
.nenghui-smtp-admin .provider h3 {
margin-top: 0;
color: #0073aa;
}
.nenghui-smtp-admin .provider ul {
margin: 10px 0;
padding-left: 20px;
}
.nenghui-smtp-admin .provider li {
margin: 5px 0;
font-size: 13px;
}
.nenghui-smtp-test {
background: #fff;
border: 1px solid #ccd0d4;
border-radius: 4px;
padding: 20px;
margin: 20px 0;
}
.nenghui-smtp-help {
background: #fff;
border: 1px solid #ccd0d4;
border-radius: 4px;
padding: 20px;
margin: 20px 0;
}
</style>
<?php
}
?>