惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
雷峰网
雷峰网
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
腾讯CDC
T
Tailwind CSS Blog
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
The Cloudflare Blog
D
DataBreaches.Net
Recent Announcements
Recent Announcements
Engineering at Meta
Engineering at Meta
B
Blog
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
博客园 - 司徒正美
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 小兔快跑

实现线程中的参数传递 利用rank() 和 dense_rank() 来实现分类排名 利用Relations实现多DataTable的聚合 为什么这样的SQL会锁记录? 在Word里实现禁止复制和选定 [VS2005]解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题” Word转pdf方法小结 原来数据库编程也可以这么美好! ASP.NET生成WORD文档服务器部署注意事项 ASP.NET:页面保存为WORD出现的问题! 动态绑定图片url:数据绑定出现的问题 .NET对Excel的读写 .NET中的CString知识点 水滴石穿之页面遮罩层实现、向window.open()打开的窗口POST数据 动态加载和使用类型 WinForm 控件的事件委托剖析 如何:使用反射将委托挂钩 SVG常见问题汇总 水滴石穿之子页面的滚动条设置 表格的固定高度宽度问题 复制带格式的文本
Web应用中实现发送带附件的电子邮件
小兔快跑 · 2009-03-11 · via 博客园 - 小兔快跑

首先关注MSDN上关于Attachment的两个解释:

Attachment Constructor

First of all, the Stream that you supply to an attachment is not read until you actually send a message. That should make sense enough, but sometimes it's easy to forget. If your stream relies on some other resource that was disposed of by the time the message is sent, the client will fail to send your message.

Secondly, if you are writing into a Stream that will later be read by an Attachment, make sure you set the Position back to 0. Otherwise, you may end up with zero-length attachments even though your stream has data! Attachment does not appear to rewind the Stream for you; it reads from whatever position the Stream is currently at.

针对第二种解释,我在测试过程中MemoryStream.Seek(0,SeekOrigin.Begin),可是附件的长度还是为0,不知道为什么;等有时间再测试一下。

解释:MemoryStream.Write()后,流的当前位置是停在结束位置上,如果再Read(),是从结束位开始读.正确的做法应该在Read() 前重新设置流位置MemoryStream.Seek(0,SeekOrigin.Begin),

现在是变通一下,先发送后删除。

Code