Monodroid - 多个邮件附件

时间:2013-02-14 10:50:58

标签: android email attachment

我正在尝试发送邮件以及附加到其上的多个文件,但是我无法将它们添加到邮件中。 我这样做:

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确实有效......

我真的需要帮助。

2 个答案:

答案 0 :(得分:2)

我个人没有找到这个问题的有效答案。 我找到的唯一答案是解决方法:将所有文件压缩为单个.zip存档,并将该存档作为单个附件发送。

答案 1 :(得分:0)

可能是,邮件活动没有足够的权限来读取您的文件。尝试在创建文件时添加myFile.setReadable(true,false),或者在添加到Attachments数组之前添加。