【发布时间】:2021-12-24 02:04:07
【问题描述】:
在服务器端,我有一个包含标准System.Net.Mail.MailMessage 的xml 序列化的文件,其中可能包含附件。
我设计了一个表单来允许用户下载这些附件。
附件下载由以下代码控制:
private byte[] ReadFully(Stream input)
{
byte[] _buffer = new byte[16 * 1024];
using (MemoryStream _ms = new MemoryStream())
{
int _read;
while ((_read = input.Read(_buffer, 0, _buffer.Length)) > 0)
{
_ms.Write(_buffer, 0, _read);
}
return _ms.ToArray();
}
}
protected void bntViewAttachment_Click(object sender, EventArgs e)
{
string _filename = Request.QueryString["file"];
if (!string.IsNullOrWhiteSpace(_filename))
{
MailMessage _message = MailMessageSerializer.Create(Path.Combine(Path.GetFullPath(Path.Combine(Server.MapPath("~"), OUTBOUND_FOLDER)), _filename));
try
{
int _selected = lbAttachments.SelectedIndex;
if (_selected != -1)
{
Attachment _attachment = _message.Attachments[_selected];
byte[] _data = ReadFully(_attachment.ContentStream);
if (_data.Length > 0)
{
Response.Clear();
Response.ContentType = MimeMapping.GetMimeMapping(_attachment.Name);
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", _attachment.Name));
Response.BinaryWrite(_data);
Response.End();
}
else
{
lblStatus.Text = "Attachment empty";
}
}
}
catch (Exception ex)
{
lblStatus.Text = "Exception : " + ex.Message;
}
}
}
电子邮件信息文件由Request.QueryString["file"] 提供,当然这不是最安全的操作方式,但现在我遇到了一个更大的问题,因为下载根本无法工作......因为_data.Length == 0 一直都是。
lbAttachments 是显示在邮件消息内的表单附件上的ListBox。
我可以使用单个附件文件 here 附加示例消息 xml。
我很确定几乎所有代码行,因为我在许多其他情况下都使用过它们,但由于某种原因,这里没有。
哪里出错了?
【问题讨论】:
标签: c# asp.net email email-attachments memorystream