Невозможно прикрепить файл eml в качестве вложения при отправке электронного письма с помощью c #?

Я получаю электронные письма через hmailserver и отправляю их в виде файла .eml в качестве вложения к другому электронному письму с отчетом.

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

Вот что я делаю.

public void addAttachment(string pathname, bool retry)
    {
        string attachmentname = "";
        do
        {
            try
            {
                attachmentname = Path.GetFileNameWithoutExtension(pathname);
                Stream file = new MemoryStream(File.ReadAllBytes(pathname));
                Log.WriteMessage("Size" + file.Length);
                dtstreamAttach.Add(attachmentname+".eml", file);
                retry = false;
            }
            catch (ArgumentException e)
            {
                string strCurrentTs = DateTime.Now.ToString(strDateFormat);
                attachmentname = attachmentname + "-" + strCurrentTs+".eml";
            }
        } while (retry);
    }

Потом,

            MailMessage message = new MailMessage();
            . 
            .
            message.Attachments.Add(new Attachment(kvp.Value, kvp.Key)); // I have an attachment dictionary 
            string contenttype = GetMimeType(".eml");
            ContentType cnttype = new ContentType(contenttype);
            message.Attachments[0].ContentType = cnttype;

как вы видите, я печатаю размер потока, который распечатывается как что-то вроде 4790 байт (4 КБ). Но когда я получаю электронное письмо, я получаю только файл eml с размер 1 КБ, а файл eml пуст.

Я проверил пути к файлам, а также убедился, что электронное письмо находится там, пока не будет отправлено мое сообщение с отчетом. Я также подтвердил, что тип контента - message/rfc822.

Кажется, все наладилось. Не уверен, в чем проблема.


person Dexters    schedule 15.05.2014    source источник
comment
проверьте эти http://stackoverflow.com/questions/936422/recommendations-on-parsing-eml-files-in-c-sharp   -  person NullReferenceException    schedule 16.05.2014
comment
@NullReferenceException Мне не нужно разбирать файлы eml.   -  person Dexters    schedule 16.05.2014


Ответы (1)


Я смог решить это. Похоже, что MemoryStream имеют правильный поток, а также ContentStream объекта сообщения имеет правильные размеры, но позиция потока переместилась в конец потока и, следовательно, когда сообщение действительно отправляется, на самом деле в нем нет ничего.

Поэтому не забудьте вернуть поток в исходное положение, прежде чем добавлять его в AttachmentCollection, например

Seek(0, SeekOrigin.Begin)

особенно при использовании потоков, завернутых в библиотеки DLL, что-то могло их переместить.

person Dexters    schedule 16.05.2014