使用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;

如您所见,我打印出流大小,输出结果类似于4790Bytes (4KB)但是当我收到电子邮件时,我只得到一个大小为1KB的eml文件,eml文件是空的。

我已经检查了文件路径,并确保电子邮件在我的报告邮件发出之前都在那里。我也验证了内容类型是message/rfc822

一切似乎都没问题。不知道是什么问题

我能够解决它。看起来MemoryStream具有正确的流,并且消息对象的ContentStream具有正确的大小,但是流位置已经移动到流的末尾,因此当消息实际被发送时,它实际上什么都没有。

所以确保在将流添加到AttachmentCollection之前将其重新定位到原点,例如

Seek(0, SeekOrigin.Begin)

相关内容

  • 没有找到相关文章

最新更新