如何在Unity WebGL中实现用户选择信息的邮件发送?
解决Unity WebGL配置器用户选择数据邮件发送问题
一、Unity端:将用户选择数据传递到后端
Unity WebGL可通过两种方式把用户选择数据传给你的PHP脚本:
方式1:用UnityWebRequest发送POST请求
在C#脚本里构造用户选择的JSON数据,发送到PHP接口:
using UnityEngine; using UnityEngine.Networking; using System.Collections; using System.Text; public class DataSender : MonoBehaviour { // 替换为你的PHP脚本地址 private string phpUrl = "https://your-domain.com/send-email.php"; public void SendUserSelection(UserSelectionData selection) { StartCoroutine(SendDataCoroutine(selection)); } private IEnumerator SendDataCoroutine(UserSelectionData selection) { string jsonData = JsonUtility.ToJson(selection); byte[] postData = Encoding.UTF8.GetBytes(jsonData); using (UnityWebRequest request = new UnityWebRequest(phpUrl, "POST")) { request.uploadHandler = new UploadHandlerRaw(postData); request.downloadHandler = new DownloadHandlerBuffer(); request.SetRequestHeader("Content-Type", "application/json"); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { Debug.Log("数据发送成功:" + request.downloadHandler.text); } else { Debug.LogError("发送失败:" + request.error); } } } } // 按你的实际需求调整字段 [System.Serializable] public class UserSelectionData { public string productType; public string color; public int quantity; // 其他需要收集的字段 }
方式2:调用浏览器JS发送请求
如果UnityWebRequest有兼容性问题,可通过Application.ExternalCall调用前端JS:
public void SendViaJS(UserSelectionData selection) { string jsonData = JsonUtility.ToJson(selection); Application.ExternalCall("sendDataToPHP", jsonData); }
在网页HTML中添加对应JS代码:
function sendDataToPHP(jsonData) { fetch('https://your-domain.com/send-email.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: jsonData, }) .then(response => response.text()) .then(data => console.log('Success:', data)) .catch((error) => console.error('Error:', error)); }
二、后端PHP脚本:接收数据并发送邮件
之前的失败大概率是PHP脚本配置或逻辑问题,推荐用PHPMailer替代原生mail(),稳定性更强:
1. 安装PHPMailer
通过Composer安装:
composer require phpmailer/phpmailer
无Composer的话,直接下载PHPMailer源码放到项目目录即可。
2. 编写send-email.php脚本
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'path/to/PHPMailer/src/Exception.php'; require 'path/to/PHPMailer/src/PHPMailer.php'; require 'path/to/PHPMailer/src/SMTP.php'; // 获取Unity发送的JSON数据 $jsonData = file_get_contents('php://input'); $selection = json_decode($jsonData, true); if (!$selection) { echo "无效的数据"; exit; } // 构造邮件内容 $emailContent = "用户选择信息:\n"; $emailContent .= "产品类型:" . $selection['productType'] . "\n"; $emailContent .= "颜色:" . $selection['color'] . "\n"; $emailContent .= "数量:" . $selection['quantity'] . "\n"; // 按需添加其他字段 // 初始化PHPMailer $mail = new PHPMailer(true); try { // 替换为你的邮箱SMTP配置(以QQ邮箱为例) $mail->SMTPDebug = 0; // 0为关闭调试模式 $mail->isSMTP(); $mail->Host = 'smtp.qq.com'; // SMTP服务器地址 $mail->SMTPAuth = true; // 启用SMTP认证 $mail->Username = 'your-email@qq.com'; // 邮箱账号 $mail->Password = 'your-email-auth-code'; // 邮箱授权码(非登录密码) $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // 加密方式 $mail->Port = 465; // SMTP端口 // 设置收件人和发件人 $mail->setFrom('your-email@qq.com', 'Unity配置器'); $mail->addAddress('your-target-email@example.com'); // 接收邮件的邮箱 // 邮件内容配置 $mail->isHTML(false); // 纯文本格式,可设为true用HTML $mail->Subject = '新的用户配置选择'; $mail->Body = $emailContent; $mail->send(); echo "邮件发送成功"; } catch (Exception $e) { echo "邮件发送失败:{$mail->ErrorInfo}"; } ?>
三、常见问题排查
- PHP权限问题:确保PHP脚本有执行权限,服务器允许发送邮件(部分虚拟主机需开启SMTP权限)
- 数据接收验证:在PHP脚本中添加日志查看数据是否正常接收:
file_put_contents('debug.log', $jsonData . "\n", FILE_APPEND); - 浏览器调试:打开浏览器开发者工具,查看Network和Console标签,检查请求是否有404、500等错误
- 跨域问题:若Unity WebGL与PHP脚本不在同域名下,需在PHP开头添加CORS头:
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Methods: POST"); header("Access-Control-Allow-Headers: Content-Type");
内容的提问来源于stack exchange,提问作者NayNay
相关产品推荐
相关产品推荐

