Можно ли создать вложение электронной почты на электронную почту Silverlight? - PullRequest
1 голос
/ 18 апреля 2011

Мне нужно иметь возможность отправить электронное письмо из клиентского приложения Silverlight.У меня это работает, реализуя веб-сервис, который используется приложением.Проблема в том, что теперь мне нужно иметь возможность добавлять вложения к отправляемым электронным письмам.

Я прочитал различные посты, десятки раз пытался разобраться сам, но безуспешно.

Так что теперь я задаюсь вопросом, возможно ли это вообще?

Основная проблема заключается в том, что коллекция вложений должна быть сериализуемой.Итак, исходя из этого, ObservableCollection - типа (FileInfo) не работает, ObservableCollection - типа (объекта) не работает ... Я попытался использовать List - типа (Stream), который сериализуется, но затем я делаюне знаю, как создать файл на стороне веб-сервиса, так как у объекта потока нет имени (это первое, что я попытался присвоить объекту Attachment, который затем будет добавлен в message.attachments) ...Я застрял здесь в колее.

Кто-нибудь может пролить свет на это, пожалуйста?

1 Ответ

1 голос
/ 20 апреля 2011

Я понял, как это сделать, и это было не так сложно, как казалось. Создайте следующее в своем пространстве имен webservice: `

[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);

Это работает для меня, вложение отправляется вместе с почтой, со всеми данными, точно такими же, как в исходном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...