【问题标题】:How to send 1 attachment from memory stream to 2 email addresses?如何将 1 个附件从内存流发送到 2 个电子邮件地址?
【发布时间】:2013-11-13 12:20:55
【问题描述】:

我创建了一个像字符串一样的文件内容:

string fileContent = CreateContent();

然后我创建了Attachment:

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();

看起来一切正常。但事实并非如此。 问题是 SendEmailWithFile 方法应该将 fileAttachment 发送给 2 个不同的人:

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) 包含完整文件。

我应该怎么做才能将正确的文件发送到两个电子邮件地址?

【问题讨论】:

  • 如果我删除语句: writer.Close();stream.Close();然后一切正常。你们觉得怎么样?不关闭memorystream对吗?

标签: c# asp.net vb.net memory stream


【解决方案1】:

为什么要发送两次?您可以使用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

【讨论】:

  • >>“如果您不想让他们看到彼此的电子邮件地址,请使用密件抄送类” - 哦,我忘了密件抄送。我会尝试。谢谢。
  • 在很多情况下,您希望通过多封单独的电子邮件将同一个文件发送给多个人。我想向所有带有 1 个或多个额外附件的员工发送个人工资单。我不想为正在发送的每封电子邮件的每个附件敲击磁盘,所以我将它们读入内存。快速连续发送数千封电子邮件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多