在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而不是php 。 WWW
类可以通过GET
或POST
请求与php或cgi程序进行通信 。
[ 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
因此错误。