- Home /
How To send Email with C# on Unity 3D 4.1.2?
first I came across this article:
Dave On C# Programming tutorials
I got few errors and I start searching:
Unity 3 - Sending Email with C#
but I just cannot figure out how to solve this:
using UnityEngine;
using System.Net;
using System.Net.Mail;
using System.Collections;
public class SendEmail : MonoBehaviour {
void Start () {
Debug.Log("asdgf");
SendEmailF();
}
private void SendEmailF(){
// Create a System.Net.Mail.MailMessage object
MailMessage message = new MailMessage();
// Add a recipient
message.To.Add("Reciver.Email@gmail.com");
// Add a message subject
message.Subject = "Test Email Subject message";
// Add a message body
message.Body = "Test email Body message.";
// Create a System.Net.Mail.MailAddress object and
// set the sender email address and display name.
message.From = new MailAddress("Sender.Email@gmail.com", "John Smith");
// Create a System.Net.Mail.SmtpClient object
// and set the SMTP host and port number
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
// If your server requires authentication add the below code
// =========================================================
// Enable Secure Socket Layer (SSL) for connection encryption
smtp.EnableSsl = true;
// Do not send the DefaultCredentials with requests
smtp.UseDefaultCredentials = false;
// Create a System.Net.NetworkCredential object and set
// the username and password required by your SMTP account
1.try
// smtp.Credentials = new NetworkCredential("Sender.Email@gmail.com", "Password");
// Assets/SendEmail.cs(43,22): error CS0266: Cannot implicitly convert type `System.Net.NetworkCredential' to `System.Net.ICredentialsByHost'. An explicit conversion exists (are you missing a cast?)
2.try
// smtp.Credentials = (ICredentialsByHost) new NetworkCredential("Sender.Email@gmail.com", "Password");
// wow no error but when I run the code:
// InvalidOperationException: SSL authentication error: RemoteCertificateNotAvailable, RemoteCertificateChainErrors
// System.Net.Mail.SmtpClient.<callback>m__4 (System.Object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, SslPolicyErrors sslPolicyErrors)
// System.Net.Security.SslStream+<BeginAuthenticateAsClient>c__AnonStorey7.<>m__A (System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Int32[] certErrors)
// Mono.Security.Protocol.Tls.SslClientStream.OnRemoteCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Int32[] errors)
// Mono.Security.Protocol.Tls.SslStreamBase.RaiseRemoteCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Int32[] errors)
// Mono.Security.Protocol.Tls.SslClientStream.RaiseServerCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Int32[] certificateErrors)
// Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection certificates)
// Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1 ()
// Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process ()
// (wrapper remoting-invoke-with-check) Mono.Security.Protocol.Tls.Handshake.HandshakeMessage:Process ()
// Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage (Mono.Security.Protocol.Tls.TlsStream handMsg)
// Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult)
// Rethrow as IOException: The authentication or decryption has failed.
// Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult)
// Rethrow as SmtpException: Message could not be sent.
// System.Net.Mail.SmtpClient.Send (System.Net.Mail.MailMessage message)
// SendEmail.SendEmailF () (at Assets/SendEmail.cs:59)
// SendEmail.Start () (at Assets/SendEmail.cs:9)
3.try
// NetworkCredential myCred = new NetworkCredential("Sender.Email@gmail.com","Password");
//
// CredentialCache myCache = new CredentialCache();
//
// myCache.Add(new Uri("www.contoso.com"), "Basic", myCred);
//
// WebRequest wr = WebRequest.Create("www.contoso.com");
// smtp.Credentials = myCache;
// Assets/SendEmail.cs(69,33): error CS0246: The type or namespace name `Uri' could not be found. Are you missing a using directive or an assembly reference?
// Assets/SendEmail.cs(69,25): error CS1502: The best overloaded method match for `System.Net.CredentialCache.Add(System.Uri, string, System.Net.NetworkCredential)' has some invalid arguments
// Assets/SendEmail.cs(69,25): error CS1503: Argument `#1' cannot convert `object' expression to type `System.Uri'
the rest of the code
// =========================================================
// Send the message
smtp.Send(message);
}
}
it's all in 1 BIG script but I only uncomment a line after 1,2,3 try and get an error that's commented
I made it like this to look a little bit more organized
and I'm using Unity 3D 4.1.2
can anyone help me for the Webmails how to give the domain name
Here step by step guide : https://researchandprogram.blogspot.com/2019/12/how-to-send-email-form-unity3d-and-c.html
Answer by ByteSheep · Apr 08, 2013 at 11:29 AM
using UnityEngine;
using System.Collections;
using System;
using System.Net;
using System.Net.Mail;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
public class mono_gmail : MonoBehaviour {
void Main ()
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress("youraddress@gmail.com");
mail.To.Add("youraddress@gmail.com");
mail.Subject = "Test Mail";
mail.Body = "This is for testing SMTP mail from GMAIL";
SmtpClient smtpServer = new SmtpClient("smtp.gmail.com");
smtpServer.Port = 587;
smtpServer.Credentials = new System.Net.NetworkCredential("youraddress@gmail.com", "yourpassword") as ICredentialsByHost;
smtpServer.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback =
delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{ return true; };
smtpServer.Send(mail);
Debug.Log("success");
}
}
This will send an email to a gmail account. Create a c# file in unity and name it 'mono_gmail'.
Don't forget to replace the email address with your own and of course add your password :)
yeah I think not only the answer deserves lots of thumbs up as he did try figuering out about 3 days iirc but even the Q as there's only old and not accurate any longer threads and Questions for how to send Email :)
Thank you very much for the code.. it saved my 1 day..
Got IT! I found out I had to set Api Compatibility Level to ".NET 2.0" ins$$anonymous$$d of ".NET 2.0 Subset" under player settings. Works great!!!
For Standalone Builds, remember to change the API Compatibility Level in PlayerSettings/OtherSettings to .NET 2.0 not .NET 2.0 Subset.
Answer by gooongalooo · Jul 04, 2015 at 05:56 PM
Better use
client.SendAsync(message , "");
especially if you want to send some more stuff like attachments and so in ;) https://msdn.microsoft.com/de-de/library/x5x13z6h%28v=vs.110%29.aspx
Answer by jeryymanly · Jan 20, 2014 at 07:54 AM
A simple smtp email
mail.From = new MailAddress("your_email_address@gmail.com");
mail.To.Add("to_address");
mail.Subject = "Test Mail";
mail.Body = "This is for testing SMTP mail from GMAIL";
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
SmtpServer.EnableSsl = true;
source: http://csharp.net-informations.com/communications/csharp-smtp-mail.htm c# smtp
jery
Answer by Falcon_DZ · Feb 25, 2016 at 07:58 AM
the above code by # merry_christmas works in standalone as well as in editor but it doesn't have any effect when build on webGL. can anyone tell what change has to be done to make it work? Thanks.
for some reason my project wont even load after i build it in webGL with this script included and the project crashes anytime i try to run the script even in the editor.
Answer by Yuriy-Ivanov · Jun 18, 2017 at 06:32 PM
Unfortunately, Unity uses an outdated and buggy Mono 2.0 SmtpClient, which doesn't fully support STARTTLS protocol used my many modern SMTP servers. We've recently published a new asset UTMail - Email Composition and Sending Plugin, which doesn't have that issue and so works well with most SMTP servers (we've tested it with number of popular ones). It also allows not only directly sending emails with SMTP, but also composing emails using a system email client, with a content defined by your app. It works on multiple platforms and supports attachments and HTML / text messages.
Best regards,
Yuriy, Universal Tools team.
Please don't revive posts that were already answered over 4 years ago just to promote your new asset.
This page still comes up on google really easily, and this response explained to me why the old answer wasn't working for me.
And the tool they are offering is exactly what I needed.