2014-01-10 2 views
5

Ich versuche, eine E-Mail von innerhalb der Einheit auf Smartphones mit der SmtpClient-Klasse zu senden. Ich habe diese recht einfache Aufgabe auf iOS erreicht, aber der exakt gleiche Code funktioniert nicht auf Android. Hier ist der Code:Senden von E-Mails von innerhalb von unity3d

private IEnumerator sendAutoMail (string textBody,string title) 
{ 
    MailMessage mail = new MailMessage(); 
    mail.From = new MailAddress(sender); 
    mail.To.Add(receiver); 
    mail.Subject = "R4UL " + title; 
    mail.Body = textBody; 

    Debug.Log("Connecting to SMTP server"); 
    SmtpClient smtpServer = new SmtpClient("smtp.gmail.com"); 
    smtpServer.Port = 587; 
    smtpServer.Credentials = new System.Net.NetworkCredential(sender, password) as ICredentialsByHost; 
    smtpServer.EnableSsl = true; 
    ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     return true; 
    }; 
    Debug.Log("Sending message"); 
    smtpServer.Send(mail); 
    yield return null; 
} 

Wo Absender, Passwort und Empfänger ist mein Google Mail-Konto, mein Google Mail-Passwort und die Person, die ich jeweils per E-Mail wünsche.

So funktioniert das perfekt auf iOS aber auf Android führt den folgenden Fehler:

I/Unity (6256): SocketException: No such host is known I/Unity (6256): at System.Net.Dns.GetHostByName (System.String hostName) [0 x00000] in :0 I/Unity (6256): at System.Net.Dns.GetHostEntry (System.String hostNameOrAdd ress) [0x00000] in :0 I/Unity (6256): at System.Net.Dns.GetHostAddresses (System.String hostNameO rAddress) [0x00000] in :0 I/Unity (6256): at System.Net.Sockets.TcpClient.Connect (System.String host name, Int32 port) [0x00000] in :0 I/Unity (6256): at System.Net.Sockets.TcpClient..ctor (System.String hostna me, Int32 port) [0x00000] in :0 I/Unity (6256): at System.Net.Mail.SmtpClient.SendInternal (System.Net.Mail .MailMessage message) [0x00000] in :0 I/Unity (6256): at System.Net.Mail.SmtpClient.Send (System.Net.Mail.MailMes sage message) [0x00000] in :0 I/Unity (6256): Rethrow as SmtpException: Message could not be sent. I/Unity (6256): at System.Net.Mail.SmtpClient.Send (System.Net.Mail.MailMes sage message) [0x00000] in :0 I/Unity (6256): at FeedbackSender+c__Iterator1.MoveNext()

ich es geschafft haben, die Fehlerstelle in der Leitung pintpoint: smtpServer.Send(mail);

Irgendwelche Ideen, was verursachen könnte sein dieses Problem? Ich habe beide Android und iOS Pro-Versionen.

Prost

+0

vielleicht ist es nicht auf der Suche nach einer E-Mail als Empfänger, sondern ein Name auf Ihrer Kontaktliste? Nur eine wilde Vermutung, aber Sie wissen nie. –

Antwort

0

Es stellte sich heraus, dass ich das SMTPClient-Objekt an eine andere Methode sendete, die dann versuchte, eine Mail mit diesem Objekt zu senden. Dies war der Grund für den Fehler, da er keine Fehlermeldung mehr lieferte, sobald diese Methode ein eigenes SMTPClient-Objekt erstellt hat.

+0

Also war dein Problem außerhalb des ursprünglichen Codes, den du gepostet hast? Ich habe sehr ähnliche Probleme, obwohl ich es anscheinend nicht beheben kann. – ArniDat

0

Ich habe gerade erfolgreich eine E-Mail von Unity 3D mit dem folgenden Code:

using System.Net; 
using System.Net.Mail; 

using UnityEngine; 

public class SendMail : MonoBehaviour { 
    public string sender = "[email protected]"; 
    public string receiver = "[email protected]"; 
    public string smtpPassword = "mysmtppassword"; 
    public string smtpHost = "mail.mymailacount.com"; 

    // Use this for initialization 
    private void Start() { 
     using (var mail = new MailMessage { 
      From = new MailAddress(sender), 
      Subject = "test subject", 
      Body = "Hello there!" 
     }) { 
      mail.To.Add(receiver); 

      var smtpServer = new SmtpClient(smtpHost) { 
       Port = 25, 
       Credentials = (ICredentialsByHost)new NetworkCredential(sender, smtpPassword) 
      }; 
      ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 
      smtpServer.Send(mail); 
     } 
    } 
} 

Mit den offensichtlichen Bits mit realen Daten ersetzt ... es von Ihnen nicht sehr verschieden ist, aber mein Mail-Server brauchte keine vollständige SSL-Authentifizierung, daher habe ich ihn entfernt.

Ich habe den Fehler, den Sie zuvor erlebt haben, nicht gesehen. Das einzige, was ich vorschlagen kann, ist zu überprüfen und zu überprüfen, dass Ihre SMTP-Werte korrekt sind - Hostname, Port, Benutzername/Passwort.

+0

Das wäre der logische Schritt zu nehmen wäre der exakt gleiche Code nicht einwandfrei in iOS:/ – kUr4m4

+0

auch hast du es von einem Android-Gerät senden? Das Problem hier ist, dass der Code, den ich gepostet habe funktioniert gut auf iOS, aber es wirft einen Host nicht auf Android bekannt. – kUr4m4

0

Überprüfen Sie, ob Sie eine Internet-Berechtigung im Manifest haben oder eine Netzwerkverbindung haben. Normalerweise ist das Problem so einfach.

+0

Es hat nichts mit Internet-Erlaubnis zu tun, aber danke für den Vorschlag. – kUr4m4