You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将WordPress自定义表单代码与WP Mail SMTP插件对接?

对接WP Mail SMTP插件实现表单提交邮件通知

嘿,你的自定义表单已经跑通数据插入了,接下来对接WP Mail SMTP插件其实超省心——这个插件的核心作用就是接管WordPress原生的wp_mail()函数,你不用写任何额外的插件对接代码,只要正常调用wp_mail(),插件就会自动用你配置好的SMTP服务器发送邮件,从根源上减少邮件进垃圾箱的概率。

第一步:确认WP Mail SMTP插件配置完成

在你开始改代码之前,先确保插件已经配置正确:

  • 进入WP后台的「WP Mail SMTP」设置页面,选好你的邮件服务商(比如Gmail、Outlook、SendGrid等)
  • 填写对应的SMTP参数(或者用服务商的API密钥,稳定性更高)
  • 设置好发件人邮箱和发件人名称
  • 点击「发送测试邮件」,确认能正常收到测试邮件——这一步一定要做,确保插件本身是可用的

第二步:修改process.php,添加邮件发送逻辑

在你的数据插入成功的代码块里,加入wp_mail()的调用即可。我们需要发送两封邮件:一封给提交表单的用户(感谢通知),一封给网站管理员(表单提交提醒)。

下面是修改后的完整代码,我标注了新增的邮件逻辑部分:

<?php
define('BLOCK_LOAD', true);
require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-config.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-includes/wp-db.php');

$wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
global $wpdb;

if (isset($_POST['submit'])) {
    $data = $_POST;

    // 插入家长数据
    $parentsdata = array(
        'name' => sanitize_text_field($data['parentsname']),
        'mobile' => sanitize_text_field($data['mobileno']),
        'email' => sanitize_text_field($data['email']),
        'agent_email' => sanitize_text_field($data['agent_email'])
    );
    $parentQuery = $wpdb->insert('wp_parent', $parentsdata, array('%s', '%s', '%s', '%s'));
    $lastid = $wpdb->insert_id;

    // 插入孩子数据
    $childdata = array(
        'p_id' => $lastid,
        'childname' => sanitize_text_field($data['childname']),
        'childage' => sanitize_text_field($data['childage']),
        'chldschoolname' => sanitize_text_field($data['nameofschool']),
        'childgrade' => sanitize_text_field($data['childgread']),
    );
    $childQuery = $wpdb->insert('wp_child', $childdata, array('%s', '%s', '%s', '%s', '%s'));

    // --- 新增:邮件发送逻辑 ---
    if ($parentQuery && $childQuery) {
        // 1. 准备邮件基础配置
        $adminEmail = get_option('admin_email'); // 获取后台设置的管理员邮箱
        $userEmail = sanitize_email($data['email']); // 验证用户邮箱合法性
        $senderName = get_bloginfo('name'); // 用网站名称作为发件人名称
        $senderEmail = get_option('admin_email'); // 建议和WP Mail SMTP设置的发件邮箱保持一致

        // 2. 发送给用户的感谢邮件
        $userSubject = '感谢您的提交!';
        $userMessage = "
        <h3>您好,{$data['parentsname']}!</h3>
        <p>我们已经收到您的表单提交,以下是您填写的信息:</p>
        <ul>
            <li>家长姓名:{$data['parentsname']}</li>
            <li>联系电话:{$data['mobileno']}</li>
            <li>孩子姓名:{$data['childname']}</li>
            <li>孩子年龄:{$data['childage']}</li>
            <li>学校名称:{$data['nameofschool']}</li>
            <li>年级:{$data['childgread']}</li>
        </ul>
        <p>我们会尽快与您联系,谢谢!</p>
        ";
        // 设置HTML邮件头
        $userHeaders = array(
            'Content-Type: text/html; charset=UTF-8',
            "From: {$senderName} <{$senderEmail}>"
        );
        wp_mail($userEmail, $userSubject, $userMessage, $userHeaders);

        // 3. 发送给管理员的提醒邮件
        $adminSubject = '新的表单提交通知';
        $adminMessage = "
        <h3>收到新的表单提交!</h3>
        <p>提交人信息:</p>
        <ul>
            <li>家长姓名:{$data['parentsname']}</li>
            <li>联系电话:{$data['mobileno']}</li>
            <li>邮箱:{$data['email']}</li>
            <li>孩子姓名:{$data['childname']}</li>
            <li>孩子年龄:{$data['childage']}</li>
            <li>学校名称:{$data['nameofschool']}</li>
            <li>年级:{$data['childgread']}</li>
        </ul>
        ";
        $adminHeaders = array(
            'Content-Type: text/html; charset=UTF-8',
            "From: {$senderName} <{$senderEmail}>"
        );
        wp_mail($adminEmail, $adminSubject, $adminMessage, $adminHeaders);

        // 跳转感谢页
        header('Location: /thank-you');
        exit();
    } else {
        $response['error'] = "false";
        // 这里可以添加错误处理,比如返回错误提示给用户
    }
}
?>

关键注意事项

  1. HTML邮件格式:如果要发HTML邮件,一定要在Headers里设置Content-Type: text/html; charset=UTF-8,否则邮件会显示成纯文本代码。
  2. 数据安全:所有用户提交的内容都要用sanitize_*函数处理,比如sanitize_email()、sanitize_text_field(),避免XSS或注入风险。
  3. 调试技巧:如果邮件没收到,去WP后台的「WP Mail SMTP」→「日志」页面查看发送记录,里面会显示错误原因(比如SMTP认证失败、收件人地址无效等)。
  4. 发件人一致性:确保你在wp_mail()里用的发件邮箱,和WP Mail SMTP设置里的发件邮箱一致,否则可能被邮件服务商判定为伪造邮件。

这样修改后,你的表单提交成功后,就会通过WP Mail SMTP配置的SMTP服务器发送邮件,大大提升邮件的送达率,减少进垃圾箱的概率。

内容的提问来源于stack exchange,提问作者user9437856

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:53:34