无法统一使用C#脚本发送电子邮件

时间:2018-12-17 04:00:31

标签: c# email unity3d

我正在使用Unity 5.6.1f1,我希望单击一下按钮即可统一发送电子邮件,我没有填写任何电子邮件表格,消息正文和主题均采用硬编码。我无法发送电子邮件。我尝试了几次,也将播放器设置APi更改为2.0。当我使用Send(mail)n方法时,我收到错误IOException Connection关闭的消息,但是使用SendAsync时,我没有收到该消息,但该电子邮件未发送到收件人电子邮件。 这是我的脚本,我将其附加到一个大型游戏对象上,然后将该游戏对象分配给场景中的一个按钮,并为该按钮的Onclick事件选择了脚本的功能名称。我收到消息“发送电子邮件。。 ”。但是没有发送电子邮件。

        public void SendMail()
{


    MailMessage mail = new MailMessage();

    mail.From = new MailAddress("sender@gmail.com");
    mail.To.Add("receiver@mtc.edu.om");
    mail.Subject = "Test Mail";
    mail.Body = "This is for testing SMTP mail from gmail";

    SmtpClient smtpServer = new SmtpClient("smtp.gmail.com");
    smtpServer.Port = 465;

    smtpServer.Credentials = new System.Net.NetworkCredential("sender@gmail.com", "senderpassword") as ICredentialsByHost;
    smtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtpServer.EnableSsl = true;
    ServicePointManager.ServerCertificateValidationCallback =
      delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
      { return true; };
    smtpServer.SendCompleted += new SendCompletedEventHandler(MailDeliveryComplete);
    smtpServer.Send(mail);
    Debug.Log("success");
}

static void MailDeliveryComplete(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
    Console.Write("Message \"{0}\".", e.UserState);

    if (e.Error != null)
        Console.WriteLine("Error sending email.");
    else if (e.Cancelled)
        Console.WriteLine("Sending of email cancelled.");
    else
        Console.WriteLine("Message sent.");
}
}

如果我使用端口587,则Unity冻结。我也尝试过SMTP服务器和Yahoo邮件的端口,并得到相同的错误。请帮忙。

我已经在Unity论坛上问了这个问题,并建议在这里发布问题,因为它与.Net框架有关。我正在寻求帮助,因为我仍然不是编程专家。

1 个答案:

答案 0 :(得分:0)

将密码直接存储在您的应用中不是最好的主意。相反,您应该使用将发送电子邮件的PHP脚本,并使用UnityWebRequest作为POST从Unity传递WWWForm。

此解决方案的缺点是您需要能够运行PHP的网络托管,但是有许多免费的托管服务。