gpt4 book ai didi

c# - 无法在多封电子邮件中重复使用电子邮件附件

转载 作者:行者123 更新时间:2023-12-03 03:03:51 25 4
gpt4 key购买 nike

我目前正在 MVC3 中提供一个表单,供用户填写一些字段并附加文件。提交后,我将发布的信息(带有附件)发送两次……第一次作为收据发送给发帖者,第二次发送给另一个目标电子邮件。

我遇到的问题是第一封电子邮件已成功发送,附件正确。第二封电子邮件带有大小为 0 的附件。似乎在我通过文件上传创建附件对象后,我无法再次重用它。使用调试器可以看到文件上传对象仍在内存中,但其 ContentLength 变为 0。

因此,在下面的示例中,如果我将代码简化如下:

public static void SendDummyEmail1()
{
using (var mailMessage = new MailMessage("from@email.com", "to@email.com"))
{
mailMessage.Subject = "Email Subject"
mailMessage.Body = Razor.Parse(template, (dynamic)dynamicTokens);
mailMessage.IsBodyHtml = true;

if (_fileUpload != null && _fileUpload.ContentLength > 0)
{
var attachment = new Attachment(_fileUpload.InputStream, _fileUpload.FileName, MediaTypeNames.Application.Octet);
attachment.ContentDisposition.FileName = Path.GetFileName(_fileUpload.FileName);
mailMessage.Attachments.Add(attachment);
}

SendMail(mailMessage);
}
}

public static void SendMail(MailMessage message)
{
var client = new SmtpClient
{
Host = ConfigurationManager.AppSettings[SmtpHostname],
Port = Convert.ToInt32(ConfigurationManager.AppSettings[SmtpPortNumber]),
UseDefaultCredentials = true,
Credentials = CredentialCache.DefaultNetworkCredentials,
DeliveryMethod = SmtpDeliveryMethod.Network,
EnableSsl = true,
};

// Work around remote certificate validation
// Ref: http://stackoverflow.com/questions/777607/the-remote-certificate-is-invalid-according-to-the-validation-procedure-using
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

client.Send(message);
}

如果我连续调用上述方法两次,第一封电子邮件将成功通过。第二封电子邮件将通过,但没有附件,因为 ContentLength 变为 0。

SendDummyEmail1();
SendDummyEmail1();

最佳答案

我认为在您的情况下_fileUpload.InputStream.CanSeek等于false,这意味着您无法再次将其结束(Position = 0 )并从中读取。尝试先将上传的文件流复制到内存流中,然后使用它代替初始流,如下所示:

MemoryStream ms = new MemoryStream();
_fileUpload.InputStream.CopyTo(ms);
byte[] data = ms.ToArray();
SendDummyEmail1(data);
SendDummyEmail1(data);

public static void SendDummyEmail1(byte[] fileContent)
{
...
var attachment = new Attachment(new MemoryStream(fileContent), ...
}

关于c# - 无法在多封电子邮件中重复使用电子邮件附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15132365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com