- Home /
Send email attachment c# - empty path
I'm trying to send a text file via an email in Unity. I'm using a GUI selection grid so the person can pick the file to send. I can send the email and attach the file but only if I write out the full path as a string (eg. "/C/Users/...") within the SendEmailF function (see below) rather than calling a variable. If I try to call a variable (which is a string variable with the path) for some reason it doesn't seem to pass on the information - I get ArgumentException: Path is Empty error when it attempts to attach the file. Any suggestions? Thanks!
void OnGUI(){
// Make selection grid with a list of files
selStrings = Directory.GetFiles(pathName, "*.txt");
selGridInt = GUI.SelectionGrid (new Rect(200,50,400,100), selGridInt, selStrings,1)
uploadFile = selStrings[selGridInt]; // this is the selected file and path to send
}
}
public void SendEmailF(){
MailMessage mail = new MailMessage (); // create email info
mail.From = new MailAddress ("myemailaddress");
mail.To.Add ("recipientemailaddress");
mail.Subject = "Test Email";
mail.Body = "This is for testing";
// This only works if I write out the full path instead of calling 'uploadFile'
System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment (uploadFile);
mail.Attachments.Add (attachment);
SmtpClient smtpServer = new SmtpClient ("smtp.gmail.com");
smtpServer.Port = 587;
smtpServer.Credentials = new System.Net.NetworkCredential ("myemailaddress", "password") as ICredentialsByHost;
smtpServer.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) {
return true;
};
smtpServer.Send (mail);
}
It would help if we could see what the upload string variable is defined as.
Sure, thanks. I'm just defining it as a String variable to start with:
public string uploadFile;
public string[] selStrings;
And then after OnGUI is run it shows the following in the inspector:
uploadFile = /Users/$$anonymous$$e/ProjectName/Assets/Data/FileName.txt
Answer by Bunny83 · Apr 13, 2015 at 02:53 PM
You just passed the filename to the Attachment constructor, but you have to use the full filename. Otherwise how should the Attachment class know what file you actually ment?
You can use Path.Combine to construct the full path name like this:
void OnGUI()
{
// [ ... ]
uploadFile = System.IO.Path.Combine(pathName, selStrings[selGridInt])
}
edit
Just realised that Directory.GetFiles should already return the full path of the files. What does "pathName" contains? Is it the full path to a directory? Or is it a relative path? You need to use an absolute path.
Thanks. pathName does contain the full path to the directory. I did also try your suggestion but got the same error.
Your answer
![](https://koobas.hobune.stream/wayback/20220613192726im_/https://answers.unity.com/themes/thub/images/avi.jpg)