是否可以在 Silverlight 电子邮件上创建电子邮件附件?

Posted

技术标签:

【中文标题】是否可以在 Silverlight 电子邮件上创建电子邮件附件?【英文标题】:Is it possible to create an email-attachment on a Silverlight email? 【发布时间】:2011-08-07 20:15:06 【问题描述】:

我需要能够从 silverlight 客户端应用程序发送电子邮件。 我通过实现由应用程序使用的 web 服务来完成这项工作。 问题是现在我需要能够为正在发送的电子邮件添加附件。

我已经阅读了各种帖子,尝试了十几次自己弄清楚,但没有成功。

所以现在我发现自己想知道这是否可能?

主要问题是附件集合需要可序列化。所以,通过这个,ObservableCollection - 类型(FileInfo)不起作用,ObservableCollection - 类型(对象)不起作用......我尝试使用 List - 类型(Stream),它可以序列化,但后来我做了不知道如何在 web 服务端创建文件,因为流对象没有名称(这是我尝试分配给附件对象的第一件事,然后将其添加到 message.attachments 中)...我在这里有点陷入困境。

请问有人能解释一下吗?

【问题讨论】:

【参考方案1】:

我想出了如何做到这一点,它并没有看起来那么困难。 在您的 web 服务命名空间中创建以下内容: `

[Serializable]
public class MyAttachment

    [DataMember]
    public string Name  get; set; 

    [DataMember]
    public byte[] Bytes  get; set; 
`

然后将以下内容添加到您的网络方法参数中: MyAttachment[] attachment

在您的网络方法的执行块中添加以下内容:`

            foreach (var item in attachment)
            
                Stream attachmentStream = new MemoryStream(item.Bytes);
                Attachment at = new Attachment(attachmentStream, item.Name);

                msg.Attachments.Add(at);
            `

在您的客户端创建以下属性(或类似属性): `

    private ObservableCollection<ServiceProxy.MyAttachment> _attachmentCollection;
    public ObservableCollection<ServiceProxy.MyAttachment> AttachmentCollection
    
        get  return _attachmentCollection; 
        set  _attachmentCollection = value; NotifyOfPropertyChange(() => AttachmentCollection); 
    `

在构造函数中新建公共属性 (AttachmentCollection)。 在 OpenFileDialog 应该返回文件的地方添加以下内容:`

如果 (openFileDialog.File != null)

        
            foreach (FileInfo fi in openFileDialog.Files)
            
                var tempItem = new ServiceProxy.MyAttachment();
                tempItem.Name = fi.Name;

                var source = fi.OpenRead();
                byte[] byteArray = new byte[source.Length];
                fi.OpenRead().Read(byteArray, 0, (int)source.Length);
                tempItem.Bytes = byteArray;
                source.Close();

                AttachmentCollection.Add(tempItem);
            

        `

最后,在您调用网络方法发送电子邮件的地方,添加以下内容(或类似内容):

MailSvr.SendMailAsync(FromAddress, ToAddress, Subject, MessageBody, AttachmentCollection);

这对我有用,附件随邮件一起发送,其所有数据与原始文件完全相同。

【讨论】:

这行得通,但我改用“lesnikowski”来处理我的邮件,不得不承认,mail.dll 工作得很好,而且很容易实现。

以上是关于是否可以在 Silverlight 电子邮件上创建电子邮件附件?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Silverlight DataTemplate 中绑定事件?

是否可以在 Silverlight 中使用 protobuf-net 对私有属性进行(反)序列化?

通过 Silverlight 连接到 OLAP Cube

Silverlight 4:如何在键盘焦点上显示工具提示(修订)

无法在 WCF Silverlight 服务上创建抽象类或接口的实例

如何分析 Silverlight 应用程序?