将一个或多个文件System.Net.Mail.MailMessage
从 ASP.NET 页面附加到对象时出现奇怪的错误。
我为用户请求的每个附加文件创建List(Of Attachment)
并添加新对象。Attachment
这些是驻留在 Web 服务器文件系统上的文件。例如,代码看起来类似于下面的代码,但它没有硬编码文件路径,而是从数据库中获取它们。但是在调试时,我看到文件路径是有效的,指向我可以从资源管理器中查看的现有文件,给定完整的文件路径或使用虚拟地址(例如~/Documents/resume.pdf)的网站。
Dim attachments As New List(Of Attachment)
attachments.Add(New Attachment("C:\Websites\Documents\resume.pdf"))
attachments.Add(New Attachment("C:\Websites\Documents\map.png"))
...
构建附件集合后,我发送电子邮件,将每个Attachment
对象添加到Attachments
集合中,如下所示:
Dim message As MailMessage = New MailMessage(from, toAddress, subject, body)
If attachments IsNot Nothing Then
For Each att As Attachment In attachments
message.Attachments.Add(att)
Next
End If
Dim mailClient As SmtpClient = New SmtpClient
mailClient.Send(message)
但是,当我运行代码时,出现以下错误:
System.InvalidOperationException:其中一个流已被使用,无法重置为原点。
System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.Net.Mail.SmtpException: Failure sending mail. ---> System.InvalidOperationException: One of the streams has already been used and can't be reset to the origin.
at System.Net.Mime.MimePart.ResetStream()
at System.Net.Mail.Attachment.PrepareForSending()
at System.Net.Mail.MailMessage.SetContent()
at System.Net.Mail.MailMessage.Send(BaseWriter writer, Boolean sendEnvelope)
at System.Net.Mail.SmtpClient.Send(MailMessage message)
--- End of inner exception stack trace ---
...
我尝试将基于数据库查询添加附件的逻辑替换为添加具有硬编码文件路径的单个文件的逻辑。我尝试过使用不同的 SMTP 客户端(我的网络主机提供商的 SMTP 服务器和 GMail)。无论如何,我都会遇到同样的错误。
谢谢