diff --git a/inc/options-framework/includes/class-options-framework-admin.php b/inc/options-framework/includes/class-options-framework-admin.php index afd40e1..4aaa886 100644 --- a/inc/options-framework/includes/class-options-framework-admin.php +++ b/inc/options-framework/includes/class-options-framework-admin.php @@ -254,7 +254,19 @@ class Options_Framework_Admin { } if ( isset( $_POST['sendmail'] ) ) { - wp_mail( get_bloginfo( 'admin_email' ) ,__('[测试]邮件服务配置成功', 'kratos'),__('恭喜您 SMTP 邮件服务配置成功!', 'kratos')); + /* + * 测试发信必须先落库再发。 + * + * 这个函数是 register_setting 的回调,返回值**之后**才会被 + * update_option() 写进数据库。如果在这里直接 wp_mail(), + * 主题配置 PHPMailer 时读 kratos_option() 拿到的还是**上一次**保存的 + * 主机/账号/密码 —— 刚改完配置点测试,测的其实是旧配置, + * 用户会看到"明明填对了却发不出去"或"改了密码还能发"这种怪现象。 + */ + update_option( 'kratos', $clean ); + + $this->yang_send_test_mail( $clean ); + do_action( 'optionsframework_after_sendmail', $clean ); return $clean; } else { @@ -263,6 +275,28 @@ class Options_Framework_Admin { } } + /** + * 发测试邮件,走主题模板 + * + * 原来这里是一句裸 wp_mail(),正文只有一行纯文本 —— 点「测试邮件」 + * 收到的样子和真实评论通知(HTML 模板)完全不同,等于没法用它验收版式。 + * 主题里早有 yang_mail_send_test() 专门干这件事,但一直没接线, + * 所以优先调它;主题被换掉或不完全时退回原样,不能因此白屏。 + */ + private function yang_send_test_mail( $clean ) + { + $to = get_bloginfo( 'admin_email' ); + + if ( function_exists( 'yang_mail_send_test' ) ) { + $r = yang_mail_send_test( $to ); + $GLOBALS['__yang_sendmail_result'] = $r; + return; + } + + wp_mail( $to, __( '[测试]邮件服务配置成功', 'kratos' ), __( '恭喜您 SMTP 邮件服务配置成功!', 'kratos' ) ); + $GLOBALS['__yang_sendmail_result'] = null; + } + /** * Display message when options have been saved */ @@ -270,8 +304,35 @@ class Options_Framework_Admin { add_settings_error( 'options-framework', 'save_options', __( '保存成功', 'kratos' ), 'updated fade' ); } + /** + * 测试邮件的提示 + * + * 原来不管发没发出去都显示「发送完成」—— SMTP 密码填错时用户也看到 + * "成功",然后去邮箱里干等。现在按真实返回值分三态:成功 / 失败 / 地址不合法。 + */ function send_mail_notice() { - add_settings_error( 'options-framework', 'send_mail', __( '发送完成,请留意邮箱:' . get_bloginfo( 'admin_email' ), 'kratos' ), 'updated fade' ); + $to = get_bloginfo( 'admin_email' ); + $r = isset( $GLOBALS['__yang_sendmail_result'] ) ? $GLOBALS['__yang_sendmail_result'] : null; + + if ( is_wp_error( $r ) ) { + add_settings_error( + 'options-framework', 'send_mail', + sprintf( __( '测试邮件未发出:%s', 'kratos' ), $r->get_error_message() ), + 'error fade' + ); + return; + } + + if ( $r === false ) { + add_settings_error( + 'options-framework', 'send_mail', + __( '测试邮件发送失败,请检查服务器地址、端口、加密方式与密码。', 'kratos' ), + 'error fade' + ); + return; + } + + add_settings_error( 'options-framework', 'send_mail', sprintf( __( '测试邮件已发出,请查收:%s(若没收到请先看垃圾箱)', 'kratos' ), $to ), 'updated fade' ); } /** diff --git a/style.css b/style.css index 2d08ff7..52b2e8a 100644 --- a/style.css +++ b/style.css @@ -1,7 +1,7 @@ /* Theme Name: Kratos_Yang Text Domain: kratos_Yang -Version: 3.2.10 +Version: 3.2.11 Requires PHP: 7.0 Description: 这是一个Kratos主题的分支版本,用来增加一些定制化功能。 Tags: 博客, 双栏, 响应式, 自定义背景, 自定义颜色, 自定义图标, 自定义菜单, 特色图像, 收录优化, 邮件中心, 主题选项, 小工具, 文章置顶, 无障碍友好