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

时间:2011-04-18 12:13:57

标签: web-services email silverlight-4.0 attachment

我需要能够从silverlight客户端应用程序发送电子邮件。 我通过实现应用程序使用的Web服务来实现这一点。 问题是,现在我需要能够为正在发送的电子邮件添加附件。

我已经阅读了各种帖子,试了十几次自己搞清楚,但没有取得胜利。

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

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

有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

我想出了如何做到这一点,并不像看上去那么困难。 在webservice-namespace中创建以下内容: `

[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应该返回文件的位置添加以下内容:`

if(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);

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