在 Windows Phone 8.1 Silverlight 应用程序上撰写带有附件的电子邮件 [英] Compose Email with attachment on Windows Phone 8.1 Silverlight application

查看:22
本文介绍了在 Windows Phone 8.1 Silverlight 应用程序上撰写带有附件的电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的功能(基于此:https://msdn.microsoft.com/en-us/library/windows/apps/xaml/dn632427.aspx):

Here's my function (based on this: https://msdn.microsoft.com/en-us/library/windows/apps/xaml/dn632427.aspx):

    private async void ComposeEmail(String subject, String messageBody, String attachmentFile)
    {
        var msg = new EmailMessage();
        msg.Subject = subject;
        msg.Body = messageBody;
        msg.To.Add(new EmailRecipient("example@example.com"));

        if (attachmentFile != null && attachmentFile != "")
        {
            bool exists = File.Exists(attachmentFile);
            Debug.WriteLine("File: " + attachmentFile + (exists ? " exists" : " not exists"));

            try
            {
                StorageFile fl = await StorageFile.GetFileFromPathAsync(attachmentFile);
                IRandomAccessStream stream = await fl.OpenAsync(FileAccessMode.Read);
                var rastream = RandomAccessStreamReference.CreateFromStream(stream);
                var attachment = new EmailAttachment(attachmentFile, rastream);
                msg.Attachments.Add(attachment);
            }
            catch (Exception e)
            {
                Debug.WriteLine("[C#] attachment exception: " + e.Message);
            }

        }

        try
        {
            await EmailManager.ShowComposeNewEmailAsync(msg);
        }
        catch (Exception e)
        {
            Debug.WriteLine("[C#] email manager exception: " + e.Message);
        }

    }

这是一个输出:

文件:C:\Data\Users\DefApps\APPDATA\Local\Packages\92319996-2154-4e16-91ac-c74ccb656b65_60jzptcn15482\AC\Temp\screenshot.png 存在

File: C:\Data\Users\DefApps\APPDATA\Local\Packages\92319996-2154-4e16-91ac-c74ccb656b65_60jzptcn15482\AC\Temp\screenshot.png exists

[C#] 电子邮件管理器异常:此 oplock 所使用的句柄关联已关闭.oplock 现在坏了.(例外来自结果:0x80070323)

[C#] email manager exception: The handle with which this oplock was associated has been closed. The oplock is now broken. (Exception from HRESULT: 0x80070323)

首先文件存在,我尝试加载它并在图像中显示并且它有效.所以这不是权限问题.其次,如果我不添加附件(只是注释掉代码),则不会引发所呈现的异常,并且我会看到带有正确主题、正文等的邮件编辑器.

First of all file exist, I tried loading it and displaying in image and it works. So this is not an issue with permissions. Second of all if I won't add an attachment (simply commenting out the code) the presented exception won't be raised and I'd see mail composer with correct subject, body etc.

推荐答案

感谢 @Will 的提示.

Thanks @Will for hint.

这是一个工作代码:

private StorageFile storageFile;

private async void ComposeEmail(String subject, String messageBody, StorageFile fl)
    {
        var msg = new EmailMessage();
        msg.Subject = subject;
        msg.Body = messageBody;
        msg.To.Add(new EmailRecipient("contact@123kidsfun.com"));

        String attachmentFile = fl.Name;

        if (fl != null && attachmentFile != "")
        {
            try
            {
                var rastream = RandomAccessStreamReference.CreateFromFile(fl);
                var attachment = new EmailAttachment(attachmentFile, rastream);
                msg.Attachments.Add(attachment);
            }
            catch (Exception e)
            {
                Debug.WriteLine("[C#] attachment exception: " + e.Message);
            }
        }

        try
        {
            await EmailManager.ShowComposeNewEmailAsync(msg);
        }
        catch (Exception e)
        {
            Debug.WriteLine("[C#] email manager exception: " + e.Message);
        }
    }

    public void SendEmail(String subject, String body, String attachmentPath)
    {
        Debug.WriteLine("[C#] sendEmail(" + subject + ", " + body + ", " + attachmentPath + ")");
        Dispatcher.BeginInvoke(() =>
        {
            CreateEmail(subject, body, attachmentPath);
        });
    }

    private async void CreateEmail(String subject, String body, String path)
    {
        storageFile = await StorageFile.GetFileFromPathAsync(path);
        ComposeEmail(subject, body, storageFile);
    }

这篇关于在 Windows Phone 8.1 Silverlight 应用程序上撰写带有附件的电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆