1

我有一个表格,发件人通过它发送他的电子邮件 ID 和密码并选择附件

使用文件上传,我从数据库表中获取收件人的电子邮件 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);
}
4

1 回答 1

2

发生这种情况是因为FileContent是 a 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)
于 2013-03-22T11:39:41.180 回答