在Unity WebGL构建中获取“system.net.sockets.socketexception没有这样的主机”

您好,感谢您抽出宝贵时间帮我解决问题。

我一直在Unity中处理一个小的webgl事情,它会在用户完成一些事情之后向用户发送电子邮件。 我把它全部构建好并准备好了,但是当我构建它并去测试它时,我发送了socketexception错误,在发送电子邮件时。

这是我用来发送电子邮件的代码

MailMessage mail = new MailMessage(); mail.From = new MailAddress(myEmail); mail.To.Add(userEmail.text); mail.Subject = "Thanks for viewing the Webcam page at WilliamLeonSmith.com"; mail.Body = "This is an automated email to deliver the attached images that were created at WilliamLeonSmith.com"; SmtpClient smtpServer = new SmtpClient("smtp.gmail.com"); smtpServer.Port = 587; smtpServer.Credentials = new System.Net.NetworkCredential(myEmail, pass) as ICredentialsByHost; smtpServer.EnableSsl = true; ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; smtpServer.Send(mail); 

不能WebGL上使用套接字或任何其他.Net网络类。 这是出于安全原因。 虽然,您可以使用Unity的WWW类。

您还有两个其他选项。

[很容易 ]

1 。 在php中 重写你问题中的代码。 使用Unity WWW类将消息toEmail,Subject,Body )发送到php脚本。 然后, php script发送实际电子邮件,其中包含从Unity App收到的信息

如果您不想学习php ,可以将问题中的代码编译控制台应用程序,然后将其用作cgi而不是phpWWW类可以通过GETPOST请求与phpcgi程序进行通信

[ HARD ]

2 。 您可以使用UnitySocketIO库实现smtp协议或您自己的MailMessage类。 https://github.com/NetEase/UnitySocketIO

由于安全隐患,JavaScript代码无法直接访问IP套接字以实现网络连接。 因此,.NET网络类(即System.Net命名空间中的所有内容,特别是System.Net.Sockets)在WebGL中不起作用。

根据统一文件http://docs.unity3d.com/Manual/webgl-networking.html

因此错误。