如何将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"; // 这里可以添加错误处理,比如返回错误提示给用户 } } ?>
关键注意事项
- HTML邮件格式:如果要发HTML邮件,一定要在
Headers里设置Content-Type: text/html; charset=UTF-8,否则邮件会显示成纯文本代码。 - 数据安全:所有用户提交的内容都要用
sanitize_*函数处理,比如sanitize_email()、sanitize_text_field(),避免XSS或注入风险。 - 调试技巧:如果邮件没收到,去WP后台的「WP Mail SMTP」→「日志」页面查看发送记录,里面会显示错误原因(比如SMTP认证失败、收件人地址无效等)。
- 发件人一致性:确保你在
wp_mail()里用的发件邮箱,和WP Mail SMTP设置里的发件邮箱一致,否则可能被邮件服务商判定为伪造邮件。
这样修改后,你的表单提交成功后,就会通过WP Mail SMTP配置的SMTP服务器发送邮件,大大提升邮件的送达率,减少进垃圾箱的概率。
内容的提问来源于stack exchange,提问作者user9437856
相关产品推荐
相关产品推荐

