用户需求:用户希望在系统上有个界面发邮件,发的内容为填写的邮件内容+数据库中附件表对应的附件
附件:附件在数据中为二进制流.
附件表字段:ATT_ID(流水号) ATT_NAME(文件名如test.jpg,xxx.doc),ATT_CONTENT(附件内容byte[])
查了一下网上的文章,都是在硬上的文章,测了一下,在硬盘上的可以发送成功.于是考虑以下解决方法
- 直接从数据库读出数据流做为附件发送(最佳方法)
- 先保存到硬盘上再以附件发送(替代方法)
protected void btnSend_Click(object sender, EventArgs e)
{
//获取附件列表
List<MyAttachment> li = new MyAttachment().GetItems();
MailMessage message = new MailMessage();
message.From = new MailAddress(xxx@126.com);
message.To.Add(xxx@126.com);
message.Subject = "test";
message.Body = "testbody";
foreach (MyAttachment myAtt in li)
{
System.IO.Stream s = this.ReturnPhoto(myAtt.Content);
System.Net.Mail.Attachment att = new System.Net.Mail.Attachment(s, myAtt.Name);
message.Attachments.Add(att);
}
message.IsBodyHtml = true;
SmtpClient client = new SmtpClient("192.168.0.1");
client.Send(message);
}
//把byte[]转成stream
public System.IO.MemoryStream ReturnPhoto(byte[] streamByte)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);
//System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
return ms;
}
测试OK.