C# 如何将1个附件从内存流发送到2个电子邮件地址?

C# 如何将1个附件从内存流发送到2个电子邮件地址?,c#,asp.net,vb.net,memory,stream,C#,Asp.net,Vb.net,Memory,Stream,我创建了类似字符串的文件内容: string fileContent = CreateContent(); 然后我创建了附件: Attachment fileAttachment = null; var stream = new MemoryStream(); var writer = new StreamWriter(stream); if (!String.IsNullOrEmpty(fileContent)) { writer.Write(fileContent); wr

我创建了类似字符串的文件内容:

string fileContent = CreateContent();
然后我创建了
附件

Attachment fileAttachment = null;
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
if (!String.IsNullOrEmpty(fileContent))
{
    writer.Write(fileContent);
    writer.Flush();
    fileAttachment = new Attachment(
        stream,
        attachmentName,
        MediaTypeNames.Text.Plain);
}
在此之后,我发送了电子邮件:

SendEmail.SendEmailWithFile(strEmailSubject, fromEmail, fileAttachment);
并关闭:

writer.Close();
stream.Close();
看起来一切都很好。但事实并非如此。 问题是
sendmailwithfile
方法应该将
fileAttachment
发送给两个不同的人:

Public Sub SendEmailWithFile(strEmailSubject, fromEmail, fileAttachment)
 Dim emlEmail As Net.Mail.MailMessage = s.GetMailMessage()
 Dim smtp As Net.Mail.SmtpClient = New Net.Mail.SmtpClient
 emlEmail.To.Add(user.EmailAddress)
 ...
 If fileAttachmentIsNot Nothing Then
    emlEmail.Attachments.Add(fileAttachment)
 End If
 smtp.Send(emlEmail)//1

 If Not String.IsNullOrEmpty(configurationManager.AppSettings("additionalEmailTo")) Then
  emlEmail.To.Clear()
  Dim address As String = configurationManager.AppSettings("additionalEmailTo")
  emlEmail.To.Add(address)
  smtp.Send(emlEmail)//2
 End If
End Sub
电子邮件发送时没有错误,但第一封电子邮件(//1)包含空文件,第二封电子邮件(//2)包含完整文件


如何将正确的文件发送到两个电子邮件地址?

为什么要发送两次?您可以使用
emlEmail.To.Add
添加更多收件人,或者如果不想让他们看到彼此的电子邮件地址,请使用密件抄送类

Public Sub SendEmailWithFile(strEmailSubject, fromEmail, fileAttachment)
 Dim emlEmail As Net.Mail.MailMessage = s.GetMailMessage()
 Dim smtp As Net.Mail.SmtpClient = New Net.Mail.SmtpClient
 emlEmail.To.Add(user.EmailAddress)
 If Not String.IsNullOrEmpty(configurationManager.AppSettings("additionalEmailTo")) Then
  Dim address As String = configurationManager.AppSettings("additionalEmailTo")
  emlEmail.To.Add(address)
 End If
...
 If fileAttachmentIsNot Nothing Then
    emlEmail.Attachments.Add(fileAttachment)
 End If
 smtp.Send(emlEmail)//1
 End Sub

为什么要寄两次?您可以使用
emlEmail.To.Add
添加更多收件人,或者如果不想让他们看到彼此的电子邮件地址,请使用密件抄送类

Public Sub SendEmailWithFile(strEmailSubject, fromEmail, fileAttachment)
 Dim emlEmail As Net.Mail.MailMessage = s.GetMailMessage()
 Dim smtp As Net.Mail.SmtpClient = New Net.Mail.SmtpClient
 emlEmail.To.Add(user.EmailAddress)
 If Not String.IsNullOrEmpty(configurationManager.AppSettings("additionalEmailTo")) Then
  Dim address As String = configurationManager.AppSettings("additionalEmailTo")
  emlEmail.To.Add(address)
 End If
...
 If fileAttachmentIsNot Nothing Then
    emlEmail.Attachments.Add(fileAttachment)
 End If
 smtp.Send(emlEmail)//1
 End Sub

如果我删除stations:writer.Close();stream.Close();然后一切正常。你们觉得怎么样,伙计们?不关闭memorystream对吗?如果我删除stations:writer.close();stream.Close();然后一切正常。你们觉得怎么样,伙计们?不关闭memorystream对吗?>>“如果你不想让他们看到彼此的电子邮件地址,请使用密件抄送类”-哦,我忘了密件抄送。我试试看。谢谢。在很多情况下,你会希望通过多封单独的电子邮件将同一文件发送给多个人。我想向所有员工发送带有1个或多个额外附件的个人工资单。我不想为每封发送的电子邮件的每个附件点击磁盘,所以我将它们读入内存。快速连续发送数千封电子邮件。>>“如果你不想让他们看到彼此的电子邮件地址,请使用密件抄送类”-哦,我忘了密件抄送。我试试看。谢谢。在很多情况下,你会希望通过多封单独的电子邮件将同一文件发送给多个人。我想向所有员工发送带有1个或多个额外附件的个人工资单。我不想为每封发送的电子邮件的每个附件点击磁盘,所以我将它们读入内存。快速连续发送数千封电子邮件。