我正在尝试发送邮件以及附加到其上的多个文件,但是我无法将它们添加到邮件中。 我这样做:
private void SendMail (List<Data> ToSend)
{
var Attachments = new List<Android.Net.Uri>();
Intent i = new Intent (Android.Content.Intent.ActionSendMultiple);
i.SetType ("message/rfc822");
i.PutExtra (Android.Content.Intent.ExtraEmail, new String[]{"try@mail.com"});
i.PutExtra (Android.Content.Intent.ExtraSubject, "Test");
i.PutExtra (Android.Content.Intent.ExtraText, "Test Test...");
foreach (var content in ToSend) {
Java.IO.File myFile = new Java.IO.File(content.attachmentloc);
// attachmentloc is a string containing the absolute path to the file to attach.
var uri = Android.Net.Uri.FromFile(myFile);
Attachments.Add (uri);
}
i.PutParcelableArrayListExtra(Android.Content.Intent.ExtraStream, Attachments.ToArray());
StartActivityForResult(Intent.CreateChooser(i, "Send mail..."), 0);
}
我检查了字符串中的路径是好的..但是方法.Exists(当在foreach中的Java.IO.File上使用时)返回false。可能是为什么?
感谢您的帮助。
修改
尝试添加单个附件时,效果很好。 但是,每当我调用一个暗示会有多个附件的函数时,它就会失败。
又名:
Intent i = new Intent (Android.Content.Intent.ActionSend);
var uri = Android.Net.Uri.Parse (ex._FileLocation);
i.PutExtra(Intent.ExtraStream, uri);
工作正常,但更换
Intent i = new Intent (Android.Content.Intent.ActionSend);
通过
Intent i = new Intent (Android.Content.Intent.ActionSendMultiple);
导致同样的失败,替换也是如此:
var uri = Android.Net.Uri.Parse (ex._FileLocation);
i.PutExtra(Intent.ExtraStream, uri);
通过
var Attachments = new List<Android.Net.Uri> ();
foreach (var ex in ToSend) {
var uri = Android.Net.Uri.Parse (ex._FileLocation);
Attachments.Add (uri);
//o
}
i.PutParcelableArrayListExtra (Android.Content.Intent.ExtraStream, Attachments.ToArray ());
...我正在使用默认邮件应用程序(不是gmail) 我也尝试将意图类型设置为“* / *”(不含空格),如其他地方所建议的那样。 还试过AddFlags(ActivityFlags.GrantReadUriPermission);
由于它适用于单个附件,我知道URI确实有效......
我真的需要帮助。
答案 0 :(得分:2)
我个人没有找到这个问题的有效答案。 我找到的唯一答案是解决方法:将所有文件压缩为单个.zip存档,并将该存档作为单个附件发送。
答案 1 :(得分:0)
可能是,邮件活动没有足够的权限来读取您的文件。尝试在创建文件时添加myFile.setReadable(true,false),或者在添加到Attachments数组之前添加。