SMTP Attachement只发送了几个字节

时间:2018-06-06 13:59:59

标签: c# asp.net-mvc smtpclient mailmessage

我正在尝试将图片附加到我的电子邮件中。 我是这样做的。

SmtpClient smtpClient = new SmtpClient();

MailMessage mailDSS = new MailMessage();

//Setting From , To and CC
mailDSS.From = new MailAddress(billModel.Email, "from: " + billModel.Email);
mailDSS.To.Add(new MailAddress("username@email.com"));

mailDSS.Subject = "This is my subject";
mailDSS.Attachments.Add(new Attachment(billModel.UploadedBill.Path + billModel.UploadedBill.Filename));
mailDSS.Attachments.Add(aAttachment);

mailDSS.Body = "This is the content :" + billModel.Name;
smtpClient.Send(mailDSS);

它可以工作,但当我尝试将其更改为内存流时,它不起作用。 这就是我想要做的工作:

 mailDSS.From = new MailAddress(billModel.Email, "from: " + billModel.Email);
 mailDSS.To.Add(new MailAddress("username@email.com"));

 mailDSS.Subject = "This is my subject";

 billModel.UploadedBill.FileDataStream.Seek(0,SeekOrigin.Begin);
 Attachment aAttachment = new Attachment(billModel.UploadedBill.FileDataStream, billModel.UploadedBill.Filename);
 aAttachment.ContentDisposition.FileName = billModel.UploadedBill.Filename;


 mailDSS.Attachments.Add(aAttachment);

 mailDSS.Body = "This is the content :" + billModel.Name;
 smtpClient.Send(mailDSS);
我做错了什么?两者之间的唯一区别是一个是对磁盘上文件的引用,另一个是对来自流的文件的引用=?

BillModel只是一个可序列化的域模型类。

public class BillModel
{
    public string Name { get; set; }
    public string CivilRegistrationNo { get; set; }
    public string Email { get; set; }
    public int Phone { get; set; }
    public int RegNo { get; set; }
    public int AccountNo { get; set; }
    public string PaymentGuarentee { get; set; }
    [XmlIgnore]
    public MemoryFileStream UploadedBill { get; set; }
}

编辑: 没有错误消息,电子邮件发送正常,但附件只有227字节,附件应该是20千字节。所以我不知道如何能够更清楚地描述我的问题。我的调试相当于尝试不同的方法,有些不起作用,有些是上述的一小部分变化。所有这些都与破坏文件有同样的问题。

如果有特定的东西需要我展示以帮助我,我会乐意提供但是我不知道我能展示什么?它根本无法正常工作。

1 个答案:

答案 0 :(得分:1)

我发现了我的问题。

问题不在我所展示的内容中。但是我从哪里开始运作。

在我的测试方法中,我做了这个

   using (System.IO.Stream fileData = System.IO.File.OpenRead(TestFilenamePath))
        {
            string filenamePath = aBillModel.UploadedBill.Path + filename;

            using (System.IO.FileStream newFileData = System.IO.File.Create(filenamePath))
            {
                fileData.Position = 0;
                fileData.CopyTo(newFileData);
            }

            fileData.CopyTo(aBillModel.UploadedBill.FileDataStream);

            //Perform Action to be tested
            bool emailSendt = EmailSender.Send(aBillModel);

            //Test Result of Action
            Assert.That(emailSendt, Is.True);
        }

显然,我无法将数据写入磁盘上的某个位置,同时又通过电子邮件发送数据。 所以我这样做了。

   using (System.IO.Stream fileData = System.IO.File.OpenRead(TestFilenamePath))
        {
            string filenamePath = aBillModel.UploadedBill.Path + filename;

            using (System.IO.FileStream newFileData = System.IO.File.Create(filenamePath))
            {
                fileData.Position = 0;
                fileData.CopyTo(newFileData);
            }
        }
        using (System.IO.Stream fileData = System.IO.File.OpenRead(TestFilenamePath))
        {
            fileData.CopyTo(aBillModel.UploadedBill.FileDataStream);

            //Perform Action to be tested
            bool emailSendt = EmailSender.Send(aBillModel);

            //Test Result of Action
            Assert.That(emailSendt, Is.True);
        }

它解决了我收到大小只有几个字节的损坏文件的问题,而不是获取大小为20Kb的文件。