当我尝试通过我的C#代码发送带有多个收件人附件的电子邮件时,会抛出一个System.Net.Mail.SmtpException,说“发送邮件失败”.
内部异常是“其中一个流已被使用,无法重置为原点.”
内部异常是“其中一个流已被使用,无法重置为原点.”
我理解这种错误可能因为我的依恋而发生.
我在另一个班级创建了我的附件 –
Attatchment file; string fileContents = File.ReadAllText(fileName); file = Attachment.CreateAttachmentFromString(fileContents,fileName);
我将这种格式发送给发送电子邮件的班级.该课程发生以下情况 –
try { email.Subject = subject; email.Body = body; if (file != null) { email.Attachments.Add(file); } _smtpClient.Send(email); } catch { mailSent = false; }
解决方法
在Attachment类的内部,它似乎使用Stream来包含数据.某些类型的流不允许您将位置重置回到开头,并将使用您在上面看到的消息抛出InvalidOperationException.
您的解决方案是:
>发送一封邮件,但将所有收件人放在Bcc
字段中.
>为您发送的每封邮件创建附件 – 不要每次都重复使用同一个对象.
>这可能不起作用,但您可以尝试使用Attachment的构造函数,它将流作为参数而不是字符串.将所有字符串数据放入MemoryStream中,这样可以重新定位.例如:
public Stream StringToStream(string s) { MemoryStream stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream); writer.Write(s); writer.Flush(); stream.Position = 0; return stream; }
然后这个:
var stream = StringToStream(File.ReadAllText(fileName)); Attatchment file = new Attachment(stream,fileName);
注意:您正在错误地初始化附件对象.在带有两个字符串参数的constructor中,第二个参数是媒体类型,而不是文件名.
原文地址:https://www.jb51.cc/csharp/243302.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。