我正在尝试创建一个系统来发送带附件的多封电子邮件。但它只是第一封附有图片的电子邮件,其余的都是空的。我究竟做错了什么?
正如你所看到的,我尝试了不同的(以及更多)。
protected void BtnSenMail_Click(object sender, EventArgs e)
{
string filename=null;
string tema = TxtEmnefelt.Text;
string indhold = TxtIndhold.Text;
string fileExtencion = null;
int fileSize = 0;
string FileNameToAdd = null;
fileSize = FiUpLoad.FileBytes.Length;
emailList = (List<string>)Session["EmailList"];
if (FiUpLoad.HasFile)
{
HttpPostedFile postedFile = FiUpLoad.PostedFile;
filename = Path.GetFileName(postedFile.FileName);
fileExtencion = Path.GetExtension(filename);
try
{
if (fileSize > 0)
{
if (fileExtencion.ToLower() == ".jpg" || fileExtencion.ToLower() == ".bmp" || fileExtencion.ToLower() == ".gif" || fileExtencion.ToLower() == ".png" || fileExtencion.ToLower() == ".pdf")
{
//Session["imgUpload"] = Path.GetFileName(FiUpLoad.PostedFile.FileName);
Session["imgUpload"] = FiUpLoad.PostedFile.FileName.ToString();
FileNameToAdd = Path.GetFileName(FiUpLoad.PostedFile.FileName);
// FileName = Session["imgUpload"];
//mm.Attachments.Add(new Attachment(FiUpLoad.PostedFile.InputStream,FileName ));
//mm.Attachments.Add(new Attachment(FiUpLoad.PostedFile.InputStream, Convert.ToString(Session["imgUpload"])));
}
else
{
LblError.Text = "Kun jpg,png,gif.bmp og pdf filer kan vedhæftes!";
LblError.ForeColor = System.Drawing.Color.Red;
return;
}
}
}
foreach (var item in emailList)
{
MailMessage mm = new MailMessage("xxxxxxxxxxx", item);
mm.Subject = tema;
mm.Body = indhold;
//mm.Attachments.Add(new Attachment(FiUpLoad.PostedFile.InputStream, Convert.ToString(Session["imgUpload"])));
mm.Attachments.Add(new Attachment(FiUpLoad.PostedFile.InputStream, FileNameToAdd));
mm.IsBodyHtml = true;
smtpClient.Send(mm);
}
答案 0 :(得分:0)
这是因为在循环的第一次迭代之后已经读取了InputStream。后续尝试从中创建附件将尝试读取相同的流,但是&#34;当前位置&#34;流已经结束了,所以他们不再读了。
你可以尝试,例如:
seek
将流读取光标重置为开头。不过,我不确定你是否可以在这种情况下做到这一点。 OR
在 for
循环之前读取整个InputStream 到一个字节数组中,(如果文件不是太大)
然后从数组中创建一个新的MemoryStream,然后在循环的每次迭代开始时使用seek
重置它,并将此流传递给{{1} }
OR
(如果由于某种原因添加附件会关闭流)
可能有更有效的方法,但我希望你能得到这个想法。