- Home /
How to send an email with an attachment ios U3DXT
How do I send an email with an attachment using the U3dxt plugin. I have tried using the mail anything script that U3dxt provides but I have to call the function twice for the mail window to show and when I cancel or send, the window does not return to the app.
http://unity3d.tutsmobile.com/mail-anything-with-unity3d/
Thank you
Answer by MihajloNen · Mar 21, 2017 at 10:43 AM
Hi @777mike777 I found this solution:
1) Use the following code(CREDITS GO TO: Om Shridhar! Original Website: https://www.linkedin.com/pulse/code-send-e-mail-attachment-from-unity-c-using-smtp-om-shridhar):
using System;
using System.Net;
using System.Net.Mail;
using System.Collections;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.IO;
public class MailerScript : MonoBehaviour {
string _sender = "";
string _password = "";
private string ScreenshotName = "/screenshot.jpg";
private string screenShotPath;
public MailerScript()
{
_sender = "the_mail_of_the_sender";
_password = "sender_pw";
}
public void Takescreenshot()
{
Debug.Log (screenShotPath = Application.dataPath);
screenShotPath = Application.persistentDataPath + ScreenshotName;
Texture2D tex = new Texture2D (Screen.width, Screen.height);
tex.ReadPixels (new Rect(0, 0, Screen.width, Screen.height), 0, 0);
tex.Apply ();
var bytes = tex.EncodeToJPG();
Destroy (tex);
System.IO.File.WriteAllBytes(screenShotPath, bytes);
//screenShotPath = Application.persistentDataPath + "/" + ScreenshotName;
//if(File.Exists(screenShotPath)) File.Delete(screenShotPath);
Application.CaptureScreenshot(ScreenshotName);
Debug.Log ("TAKESCREENSHOT FUNCTION EXECUTED");
}
public void SendEmail()
{
Debug.Log ("SEND EMAIL FUNCTION EXECUTED");
//For File Attachment, more files can also be attached
Attachment att = new Attachment(@screenShotPath);
//tested only for files on local machine
//Hardcoded recipient email and subject and body of the mail
string recipient = "the_recipients_email";
string subject = "Testmail from App";
string message = "Test_Hello_World";
SmtpClient client = new SmtpClient("smtp.gmail.com");
//SMTP server can be changed for gmail, yahoomail, etc., just google it up
client.Port = 25;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(_sender, _password);
client.EnableSsl = true;
client.Credentials = (System.Net.ICredentialsByHost)credentials;
try
{
var mail = new MailMessage(_sender.Trim(), recipient.Trim());
mail.Subject = subject;
mail.Body = message;
mail.Attachments.Add(att);
Debug.Log("Attachment is now Online");
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
};
client.Send(mail);
Debug.Log("Success");
}
catch (Exception ex)
{
Debug.Log(ex.Message);
throw ex;
}
}
}
2) Edit the code so it matches your mail setup (sender, password, recipient, smtp client...)
3) Use Takescreenshot()-function to Take a screenshot and SendMail() to send the mail with the attachment.
4) It will now work in UNITY EDITOR BUT NOT ON IOS BUILD!!!!
5) Open your computers text editor application (I used Mac --> Text Edit) and paste the following code (CREDITS GO TO: Josh Peterson! Original thread: https://forum.unity3d.com/threads/ios-xcode-error-when-using-system-net-mail.334932/):
<linker>
<assembly fullname="System">
<type fullname="System.Net.Configuration.MailSettingsSectionGroup" preserve="all"/>
<type fullname="System.Net.Configuration.SmtpSection" preserve="all"/>
<type fullname="System.Net.Configuration.SmtpNetworkElement" preserve="all"/>
</assembly>
</linker>
Name it "link" and safe it as a .xml-file (it will be: link.xml)
6) Add this link.xml to your assets folder in your Unity project and build it for iOS. --> the link.xml prevents the needed libraries to be stripped when builing to iOS plattform!
7) Now you should be able to send an email WITH an attachment to the recipients mail address :)