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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:33:41