为什么除了第一个附件对象之外,所有附件对象上的FileContent都是零字节?
本文关键字:对象 FileContent 字节 第一个 为什么 | 更新日期: 2023-09-27 18:05:12
我有一个表单,发件人通过它发送他的电子邮件id和密码并选择附件
使用fileupload,收件人的电子邮件id我从数据库表中获得,电子邮件到达收件人很好,但是
问题是,当我附加一个附件时,附件的大小为0,除了第一个电子邮件id
,我从表....得到我已经粘贴了代码…
foreach (string email_to in list_emails)
{
MailMessage mail = new MailMessage();
mail.To.Add(email_to);
mail.Subject = "UPDATES FROM ATTENDANCE S/W";
mail.From = new MailAddress(txtFrom.Text.ToString());
mail.Body = txtMessage.Text;
if (FileUpload1.HasFile)
{
string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
Attachment myAttachment =
new Attachment(FileUpload1.FileContent, fileName);
mail.Attachments.Add(myAttachment);
}
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.UseDefaultCredentials = false;
smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text.ToString(), txtPasswd.Text.ToString());
smtp.EnableSsl = true;
smtp.Send(mail);
}
这是因为FileContent
是Stream
,所以当你从它读取Stream
的位置时,它留在最后。考虑一下这样的事情。在循环的顶部存储字节,您不需要一直从Stream
中读取它们:
bool hasFile = FileUpload1.HasFile;
int fileLen = FileUpload1.PostedFile.ContentLength;
Stream stream = FileUpload1.FileContent;
byte[] file = new byte[fileLen];
stream.Read(file, 0, fileLen);
然后在循环中,利用变量:
new Attachment(new MemoryStream(file) ...
,您将需要更改if
语句以利用bool
:
if (hasFile)