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

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Project Zero
Project Zero
D
DataBreaches.Net
博客园_首页
罗磊的独立博客
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Forbes - Security
Forbes - Security
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
雷峰网
雷峰网
Jina AI
Jina AI
O
OpenAI News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 三生石上(FineUI控件)
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
SegmentFault 最新的问题
V
Visual Studio Blog
Webroot Blog
Webroot Blog
GbyAI
GbyAI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
腾讯CDC
IT之家
IT之家
C
Cyber Attacks, Cyber Crime and Cyber Security
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
T
Troy Hunt's Blog
博客园 - 叶小钗
N
News and Events Feed by Topic
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
C
Check Point Blog
T
Threatpost
SecWiki News
SecWiki News
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
P
Privacy International News Feed
J
Java Code Geeks
L
LINUX DO - 最新话题
PCI Perspectives
PCI Perspectives
T
Tailwind CSS Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cisco Blogs
S
Schneier on Security

博客园 - 江湖工夫

TextBox控件TextMode=Password时赋值 [转]随滚动条滚动的层(支持IE6,FF2) Iframe页面内容变更页面自动改变大小(非加载时自适应大小) SQL注入的漏洞,过滤httprequest Visual SourceSafe应用守则[转] Microsoft SQL Server 分析服务 SQL中使用DISTINCT显示多个字段的方法(不使用DISTINCT了) GridView分页后跳转其他页面进行添加,编辑,删除操作后,仍返回到当前页码[原] Ajax的按钮事件效果 层的移动,使用了jquery asp.net(C#)处理数据一个通用类,包括存储过程,适用于初学者[转] IE和Firefox在JavaScript方面的兼容性(汇编) asp.net 对xml文件的读写,添加,修改,删除操作[转] 一些动画进度的图标链接 邹建的通用分页存储过程[转] 一个存储过程实现将Excel数据导入数据库 SQL SERVER事务处理[转] SQL与MDX语法的比较 一个存储过程
抓取网络文件的URL地址作附件发送
江湖工夫 · 2008-07-04 · via 博客园 - 江湖工夫

最近公司的一个项目, 把网站的前后台分离到两个不同的服务器上(后台Server在公司内部网,前台Server在互联网了).
前后台用户(分别称呼:客户,公司员工)所有的上传的文件必须要存放在前台的Server上,这样客户才能无障碍访问文件.
那,客户登陆前台提出咨询问题之后,公司员工回复问题解决方法,解决方法包含附件.提交保存后要给前台用户发送一个mail,将回复的内容和附件发送到客户的邮箱.

通常发送带附件的邮件的方式为(使用System.Net.Mail):
首先添加引用:

using System.Net.Mail;

再编写发送mail代码:

 1        SmtpClient SmtpMail = new SmtpClient("127.0.0.1"); //127.0.0.1为发送邮件服务器IP.
 2        MailMessage sendMail = new MailMessage();
 3        sendMail.Subject = "测试发送带附件的邮件";  //邮件的主题
 4        sendMail.From = new MailAddress("sender@mail.com");  //发件人
 5        string strToUser = "receiver@mail.com";   //收件人
 6        string[] temp;
 7        if (strToUser != null && strToUser.Trim() != "")
 8        {
 9            temp = strToUser.Split();
10            for (int i = 0; i < temp.Length; i++)
11            {
12                sendMail.To.Add(new MailAddress(temp[i]));
13            }

14        }

15        sendMail.Body = "请注意附件.";   //邮件内容
16        sendMail.SubjectEncoding = System.Text.Encoding.UTF8;   //主题内容编码.
17        sendMail.BodyEncoding = System.Text.Encoding.UTF8;  //邮件内容编码.
18        sendMail.IsBodyHtml = true//邮件内容支持HTML
19
20        string strPath = "E:\\foo.txt"//要发送附件
21        if (strPath != null && strPath.Length != 0)
22        {
23            try
24            {
25                Attachment ma = new Attachment(strPath);
26                sendMail.Attachments.Add(ma);
27            }

28            catch
29            { }
30        }

31        SmtpMail.Send(sendMail);

这里因为附件被上传到了前台Server上,所以取得附件的方法需要改变了.

首先添加引用:

1using System.Net.Mail;
2using System.Net;
3using System.Net.Mime;
4using System.IO;

下面代码:

 1        SmtpClient SmtpMail = new SmtpClient("10.98.0.50"); //10.98.0.50为发送邮件服务器IP.
 2        MailMessage sendMail = new MailMessage();
 3        sendMail.Subject = "测试发送带附件的邮件";  //邮件的主题
 4        sendMail.From = new MailAddress("Sender@mail.com");  //发件人
 5        string strToUser = "Receiver@mail.com";   //收件人
 6        string[] temp;
 7        if (strToUser != null && strToUser.Trim() != "")
 8        {
 9            temp = strToUser.Split();
10            for (int i = 0; i < temp.Length; i++)
11            {
12                sendMail.To.Add(new MailAddress(temp[i]));  //CC.Add() 添加抄送,Bcc.Add() 添加暗送
13            }

14        }

15        sendMail.Body = "请注意附件.";   //邮件内容
16        sendMail.SubjectEncoding = System.Text.Encoding.UTF8;   //主题内容编码.
17        sendMail.BodyEncoding = System.Text.Encoding.UTF8;  //邮件内容编码.
18        sendMail.IsBodyHtml = true//邮件内容支持HTML
19
20        string strPath = "http://10.98.0.18/fore/UploadFiles/File/128593509120029362699.doc"//要发送附件的网址
21        string strFileName = strPath.Substring(strPath.LastIndexOf("/"+ 1); ;   //文件名
22
23        WebClient wc = new WebClient();
24        MemoryStream m = new MemoryStream();
25
26        if (strFileName != "" && strFileName != null)
27        {
28            try
29            {
30                byte[] fs = wc.DownloadData(strPath);
31                m = new MemoryStream(fs);  //将文件抓取下来,存于内存中.
32
33                Attachment ma = new Attachment(m, strFileName);
34                sendMail.Attachments.Add(ma);
35                fs = null;
36            }

37            catch
38            { }
39        }

40
41        SmtpMail.Send(sendMail);
42        sendMail.Attachments.Dispose(); //邮件发送完毕,释放对附件的锁定
43        m.Dispose();
44        wc.Dispose();

补:

SmtpClient 请确保发送服务器地址正确,否则可能出现“由于目标机器积极拒绝,无法连接。”的错误;同时请确保端口正确,否则可能出现“远程主机强迫关闭了一个现有的连接”的错误。

现在的 SMTP 服务器,几乎都要求验证,通过 NetworkCredential 来发送用户名和密码。

SmtpClient smtp = new SmtpClient("SMTP 服务器地址");
smtp.Credentials 
= new NetworkCredential("登录名""密码"); //SMTP 验证