我正在尝试将图片附加到我的电子邮件中。 我是这样做的。
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千字节。所以我不知道如何能够更清楚地描述我的问题。我的调试相当于尝试不同的方法,有些不起作用,有些是上述的一小部分变化。所有这些都与破坏文件有同样的问题。
如果有特定的东西需要我展示以帮助我,我会乐意提供但是我不知道我能展示什么?它根本无法正常工作。
答案 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的文件。