??xml version="1.0" encoding="utf-8" standalone="yes"?>
1、DateTime 数字型?
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分U?
currentTime=System.DateTime.Now;
1.2 取当前年
int q?currentTime.Year;
1.3 取当前月
int ?currentTime.Month;
1.4 取当前日
int ?currentTime.Day;
1.5 取当前时
int ?currentTime.Hour;
1.6 取当前分
int ?currentTime.Minute;
1.7 取当前秒
int U?currentTime.Second;
1.8 取当前毫U?
int 毫秒=currentTime.Millisecond;
Q变量可用中文)
2、Int32.Parse(变量) Int32.Parse("帔R")
字符型{?转ؓ32位数字型
3、?变量.ToString()
字符型{?转ؓ字符串?
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 K?2,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16q制)
12345.ToString("p"); //生成 1,234,500.00%
4、变?Length 数字型?
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量Q?str是求的字串的变量名
5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转ؓ比特码?
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比牚w度:
len = bytStr.Length;
6、System.Text.StringBuilder("")
字符串相加,Q?h不是也一PQ?
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和?);
7、变?Substring(参数1,参数2);
截取字串的一部分Q参?为左起始位数Q参?为截取几位。?
如:string s1 = str.Substring(0,2);
8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远E用户IP地址
9、穿q代理服务器取远E用L实IP地址Q?
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}
10、?Session["变量"];
存取Session|
如,赋| Session["username"]="布什";
取| Object objName=Session["username"];
String strName=objName.ToString();
清空Q?Session.RemoveAll();
11、String str=Request.QueryString["变量"];
用超链接传送变量。?
如在M中链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx中取|String str=Request.QueryString["fdid"];
12、DOC对象.CreateElement("新徏节点?);
创徏XML文档新节点?
13、父节点.AppendChild(子节?Q?
新建的子节点加到XML文档父节点下
14?父节?RemoveChild(节点);
删除节点
15、Response
Response.Write("字串")Q?
Response.Write(变量)Q?
向页面输出。?
Response.Redirect("URL地址"Q;
跌{到URL指定的页面?
16、char.IsWhiteSpce(字串变量Q位?——逻辑型?
查指定位|是否空字符Q?
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //l果为:True, W一个字W是0位,2是第三个字符。?
17、char.IsPunctuation('字符') --逻辑型?
查字W是否是标点W号
如:Response.Write(char.IsPunctuation('A')); //q回QFalse
18?int)'字符'
把字W{为数字,查代码点Q注意是单引受?
如:
Response.Write((int)'?); //l果Z字的代码Q?0013
19?char)代码
把数字{为字W,查代码代表的字符。?
如:
Response.Write((char)22269); //q回“国”字。?
20?Trim()
清除字串前后I格
21 、字串变?Replace("子字?,"替换?)
字串替换
如:
string str="中国";
str=str.Replace("?,"?); //国字换为央字?
Response.Write(str); //输出l果为“中央”?
再如Q(q个非常实用Q?
string str="q是<script>脚本";
str=str.Replace("<","<font><</font>"); //左括h换ؓ<font> ?< ?</font> Q或换ؓ<Q但估计lXML存诸后,再提Z会还原)
Response.Write(str); //昄为:“这?lt;script>脚本”?
如果不替换,<script>不昄Q如果是一D脚本,运行;而替换后Q脚本将不运行。?
q段代码的h(hun)值在于:你可以让一个文本中的所有HTML标签失效Q全部显C出来,保护你的h交互性的站点。?
具体实现Q将你的表单提交按钮脚本加上下面代码Q?
string strSubmit=label1.Text; //label1是你让用h交数据的控gID。?
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit。?
用此Ҏ(gu)q可以简单实现UBB代码。?
22、Math.Max(i,j)
取i与j中的最大值?
?int x=Math.Max(5,10); // x取?10
QconfigurationQ?br />Qsystem.webQ?/font> |
Q?system.webQ?br />Q?configurationQ?/font> |
Qauthentication mode="Forms" Q? Qforms loginUrl="logon.aspx" name=".FormsAuthCookie"/Q?br /> Q?authenticationQ?/font> |
QauthorizationQ?br /> Qdeny users="?"/Q?br />Q?authorizationQ?/font> |
QcustomErrors defaultRedirect="ErrorPage.aspx" mode="RemoteOnly"Q?br />Q?customErrorsQ?/font> |
QhttpRuntime maxRequestLength="4096" executionTimeout="60" appRequestQueueLimit="100"/Q?/font> |
Qpages buffer="true" enableViewStateMac="true" validateRequest="false"/Q?/font> |
QsessionState mode="InProc" cookieless="true" timeout="20"/Q?br />Q?sessionStateQ?/font> |
Qtrace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" /Q?/font> |
QconfigurationQ?br /> QconfigSectionsQ?br /> Qsection name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/Q?br />Q?configSectionsQ?br /> QappSettingsQ?br /> Qadd key="scon" value="server=a;database=northwind;uid=sa;pwd=123"/Q?br /> Q?appSettingsQ?br /> Qsystem.webQ?br /> ...... Q?system.webQ?br />Q?configurationQ? |
Dim sconstr As String = ConfigurationSettings.AppSettings("SconStr") Dim scon = New SqlConnection(sconstr) |
ASP.NET 2.0中新的页面编译模型给实现通配W映应用程序带来意想不到的问题Q下面我以博客园Blog软gZ与大家一些探讨这些问题?
在博客园Blog软g中,实现IhttpHandlerFactory接口的是Dottext.Common.UrlManager. UrlReWriteHandlerFactoryQ不改变在ASP.NET 1.1中实现的UrlReWriteHandlerFactory代码Q直接在ASP.NET 2.0中编译ƈq行Q当E序q行在IIS根目录下Q就会在执行PageParser.GetCompiledPageInstance时出现“Object reference not set to an instance of an object”异?q行在虚拟目录中不会出现q个问题)。这个问题是ASP.NET 2.0中的一个小BugQ之前我写的
PageParser.GetCompiledPageInstance中的一个Bug及解x?/font>
对这个问题进行了一些分析,q个问题可以通过在PageParser.GetCompiledPageInstance之前调用context.RewritePathQ?~/default.aspx")解决?
接着q行讉K个hBlog主页的测试,比如Q?/font>
http://www.cnblogs.com/dudu
Q访问时出现错误Q?
在ASP.NET 2.0中,当我们第一ơ访问一个页面时Q必不少的两个过E是Q?、页面编?2、创建编译后的页面代码的实例。页面编译是Ҏ(gu)所讉K的url地址中的扩展名找到匹配的Build Provider寚w面进行编译。这里出现的问题是由于ASP.NET 2.0q行时没扑ֈ相应的Build ProviderQ对 http://www.cnblogs.com/dudu q样地址Q由于用了通配W映,在ASP.NET 2.0q行时处理时Q得到的扩展名是I?如果没有使用通配W映,IIS会自动将地址改ؓQ?/font> http://www.cnblogs.com/dudu/default.aspx )。ASP.NET 2.0在这里的设计不之处是没有考虑q种情况Q无法通过在web.config中进行相应的配置来解册个问题。如果能提供下面的配|,q个问题可以轻松解冻I
对于q个问题Q我的解x法是在PageParser.GetCompiledPageInstance之前对urlq行处理Q在url中加上缺省文Ӟ比如Qdefault.aspx。如果你想用其他的扩展名,比如Q?htmlQ需要在web.config中加?
q里q有一个小bugQ在上面的错误信息“Make sure is has a BuildProvider AppliesToAttribute attribute which includes the value 'Web' or 'All'.”提C需要设|AppliesToAttribute属性,实际上web.config中ƈ不支持这L属性,可能是正式版之前的ASP.NET 2.0支持q这个属性,后来L后,错误提示信息q没有修攏V?
解决了上面的两个问题Q原以ؓ通配W映应用程序可以在ASP.NET 2.0中正常运行了Q我在本Z试博客园的E序Q页面能正常讉K。可是今天凌晨在服务器进上将|站升到ASP.NET 2.0之后Q发现ASP.NETq行时在频繁地编译页面,CPU占用一?00%Q编译了一个多时q在~译Q而且~译g与访问量有关Q访问少的站炚w面还能打开Q博客园ȝ׃讉K量大Q几乎无法访问。问题出在哪Q于是我从PageParser.GetCompiledPageInstance的源代码LU烦Q在BuildManager.GetCacheKeyFromVirtualPath中发现可疑之处,BuildManager是根据所h的虚拟\径创建缓存键Q然后根据这个键查找或创建页面编译后的缓存对象。当对一个页面发求时QBuildManager会检查缓存,先从内存中检查,如果内存中没有就从缓存文件夹(Temporary ASP.NET Files)中查找,如果扑ֈQ就直接创徏该类型的实例Q不q行动态编译。如果没扑ֈQ就q行面~译工作Q而且查找的依据就是根据虚拟\径创建的~存键。对于通常的页面访问方式,q样处理不会引v问题。但对于通配W映的情况Q就会带来问题。因为通配W映时Q常见情冉|不同的url地址讉K的却是同一个页面文件。比如博客园中每文章地址不同Q但讉K的却是同L面代码Q如果按照目前ASP.NET 2.0中的面~译模型Q每文章第一ơ访问都要进行编译,如果博客园中的几十万文章被讉KQ就要进行几十万~译Q难怪今天博客园|站升至ASP.NET 2.0之后Q服务器一直忙于编译?
l过试情况果然q样Q当然访问地址Q?/font>
http://www.cnblogs.com/dudu/archive/2006/03/07/345107.html
时会在Temporary ASP.NET Files中文件夹~译生成cASP.dudu_archive_2006_03_07_345107_htmlQ而访问其他文章地Ӟ也根据文章地址生成另外一个类(2006q??2日修改:对于q个问题Q通过传给PageParser.GetCompiledPageInstance一个真实的虚拟地址p解决问题Q比如在博客园程序中Q对于上面的地址Q改L代码p了:GetCompiledPageInstance(app+"~/default.aspx", pagepath, context))?/font>
q样~译效率实在太低?Z么要Ҏ(gu)虚拟路径创徏~键Q设计者设计时Ҏ(gu)没考虑到通配W映的问题Q真是糟p的设计Q如果按照ASP.NET 1.1那样Ҏ(gu)实际讉K的页面文件名创徏~存键,可以轻村֜避免q个问题。ASP.NET 2.0新的面~译模型在这里似乎是一个|W。更p糕的是q让开发h员I补这个Bug的机会都没有QSystem.Web.Compilation.BuildManager中没有提供一个让开发h员自p|缓存键的方法或属性?注:创徏~存键的Ҏ(gu)是BuildManager. GetCacheKeyFromVirtualPath(VirtualPath virtualPath, out bool keyFromVPP))。更p糕的是QSystem.Web.Compilation中的很多c都是internalQ很多类的方法是灰色QReflector用灰色显Cinternal static或privateQ颜色用的不错,让h看了q心)Q想自己调用相应Ҏ(gu)q行面~译几乎是不可能(用反的Ҏ(gu)不知能否调用Q还没试q,即能调用,也要考虑性能上的损失)。难道要自己写System.Web.Compilation中那些类d理页面编译?我宁愉K择ASP.NET 1.1Q然后等ASP.NET 2.0 SP1QSP1解决不了Q等SP2......希望不要{到ASP.NET 3.0? 也许你想C在GetHandler(HttpContext context, string requestType, string url, string path)中调用System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath来编译ƈ创徏面的实例。这个方法我也尝试过Q答案是不行Q还不如PageParser.GetCompiledPageInstanceQ至后者能让程序运行v来。用BuildManager.CreateInstanceFromVirtualPathӞ当访问的地址中不带扩展名时就会出现“The resource cannot be found”错误,原因是在GetVPathBuildResultInternal(VirtualPath virtualPath, bool noBuild, bool allowCrossApp, bool allowBuildInPrecompile)中调用了Util.CheckVirtualFileExists(virtualPath)对虚拟\径进行检查,查时虚拟\径{换ؓ物理路径Q检查当前请求的面文g是否存在Q对于通配W映应用程序,很多地址是实际上不存在的Q所以就出现“The resource cannot be found”错误。而PageParser.GetCompiledPageInstance中通过调用HostingEnvironment.AddVirtualPathToFileMapping避免了这个问题。而这个方法被
Internal保护Q在代码中也无法调用?
我觉得问题的核心是ASP.NET 2.0设计者在设计时没有考虑通配W映这L情况。是忽略q是另有考虑Q就不得而知了。但ASP.NET 1.1能正处理这个问题,而ASP.NET 2.0却处理不了,q里很不应该的。用通配W映的Web应用E序用户只能望ASP.NET 2.0心叹。最q花了很大精力想把博客园的程序迁UdASP.NET 2.0Q而结果却是无法迁UdASP.NET 2.0Qo人失? 只能寄希望微软推出相应的补丁?
q好Q用通配W映的Web应用E序不是很多Q这个问题媄响不是很大?
}
catch(System.Exception ex)
{
errorMsg = ex.Message ;
}
return "";
}
你可以用q个函数获取|页的客L的html代码Q然后保存到.html文g里就可以了?/font>
Ҏ(gu)2Q?br />生成单个的静态页面不是难点,隄是各个静态页面间的关联和链接如何保持完整Q?br />特别是在面频繁更新、修攏V或删除的情况下Q?/font>
像阿里巴巴的面也全部是html的,估计用的是地址映射的功?br />关于地址映射可参考: http://www.easewe.com/Article/ShowArticle.aspx?article=131
可以看看q个面Q分析一下他的“竞价倒计时”功?br /> http://info.china.alibaba.com/news/subject/v1-s5011580.html?head=top4&Bidding=home5
ASP.Net生成静态HTML?br />在Asp中实现的生成静态页用到的FileSystemObject对象!
?Net中涉及此cL作的是System.IO
以下是程序代??此代码非原创!参考别Z?/font>
CODE:
//生成HTML?br /> public static bool WriteFile(string strText,string strContent,string strAuthor)
{
string path = HttpContext.Current.Server.MapPath("/news/");
Encoding code = Encoding.GetEncoding("gb2312");
// d模板文g
string temp = HttpContext.Current.Server.MapPath("/news/text.html");
StreamReader sr=null;
StreamWriter sw=null;
string str="";
try
{
sr = new StreamReader(temp, code);
str = sr.ReadToEnd(); // d文g
}
catch(Exception exp)
{
HttpContext.Current.Response.Write(exp.Message);
HttpContext.Current.Response.End();
sr.Close();
}
string htmlfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+".html";
// 替换内容
// q时,模板文g已经d到名UCؓstr的变量中?br /> str =str.Replace("ShowArticle",strText); //模板中的ShowArticle
str = str.Replace("biaoti",strText);
str = str.Replace("content",strContent);
str = str.Replace("author",strAuthor);
// 写文?br /> try
{
sw = new StreamWriter(path + htmlfilename , false, code);
sw.Write(str);
sw.Flush();
}
catch(Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
HttpContext.Current.Response.End();
}
finally
{
sw.Close();
}
return true;
此函数放在Conn.CS基类中了
在添加新ȝ代码中引?注:工程名ؓHover
if(Hover.Conn.WriteFilethis.Title.Text.ToString),this.Content.Text.ToString),this.Author.Text.ToString)))
{
Response.Write("d成功");
}
else
{
Response.Write("生成HTML出错!");
}
模板Text.html代码
CODE:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>ShowArticle</title>
<body>
biaoti
<br/>
content<br/>
author
</body>
</HTML>
biaoti
<br/>
content<br/>
author
</body>
</HTML>
提示d成功后会Z当前旉为文件名的html文g!上面只是把传递过来的几个参数直接写入了HTML文g?在实际应用中需要先d数据库,然后再写入HTML文g
Ҏ(gu)3Q?br />l一个客L参考的例子QSJQ?br />它的作用在于以客L的方式获取某个页面的代码Q然后可以做为其他用途,本例是直接输?br /><script>
var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
oXmlHttp.open("GET","
http://www.163.com
", false);
oXmlHttp.send()
var oStream = new ActiveXObject("ADODB.Stream");
if(oStream == null)
alert("(zhn)的机器不支持ADODB.Stream.")
else
{
oStream.Type=1;
oStream.Mode=3;
oStream.Open() ;
oStream.Write(oXmlHttp.responseBody);
oStream.Position= 0;
oStream.Type= 2;
oStream.Charset="gb2312";
var result= oStream.ReadText();
oStream.Close();
oStream = null;
var aa = window.open("","")
document.write(result);
aa.document.write(result);
}
</script>
Ҏ(gu)4Q学csdn一栗用xml保存数据Q模版XSL也只有一个文件?br />使用xml来保存数据,使用xsl来定义模板ƈ且生U数据。可以通过xsl来很方便的在客户端或者服务段昄数据。如果要生成静态叶面那更简单了。去查一?net的xmlcd问题解决?br /> 优点Q可以方便快速{换成你想要的格式和内宏V?br /> ~点Q需要学习更多的内容Q不好入门?/font>
Ҏ(gu)5Q?br />思\
1. 利用如Dw-Mxq样的工L成html格式的模板,在需要添加格式的地方加入Ҏ(gu)标记(?htmlformat$),动态生成文件时利用代码d此模板,然后获得前台输入的内容,d到此模板的标C|中Q生成新文g名后写入盘Q写入后再向数据库中写入相关数据?br /> 2. 使用后台代码编码Html文gQ可以用HtmlTextWritercL写html文g?
优点
1. 可以建立非常复杂的页面,利用包含js文g的方法,在js文g内加入document.write()Ҏ(gu)可以在所有页面内加入如页面头Q广告等内容?
2. 静态html文g利用MS Windows2000的Index Server可以建立全文搜烦引擎Q利用asp.net可以以DataTable的方式得到搜索结果。而Win2000的Index服务无法查找xml文g的内宏V如果包括了数据库搜索与Index索引双重查找Q那么此搜烦功能非常强大?
3. 节省服务器的负荷Q请求一个静态的html文g比一个aspx文g服务器资源节省许多?
~点
思\二: 如果用硬~码的方式,工作量非常大Q需要非常多的html代码。调试困难。而且使用编码生成的html样式无法修改Q如果网站更换样式,那么必须得重新编码,l后期带来巨大的工作量?
因此q里采用的是W一U思\
C列代码
1.定义(template.htm)html模板面
QhtmlQ?
QheadQ?
QtitleQ</titleQ?
Qmeta http-equiv="Content-Type" content="text/html; charset=gb2312"Q?
Q?headQ?
Qbody Q?
Qtable $htmlformat[0] height="100%" border="0" width="100%" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" style="border:1px solid #000000"Q?
QtrQ?
Qtd width="100%" valign="middle" align="left"Q?
Qspan style="color: $htmlformat[1];font-size: $htmlformat[2]"Q?htmlformat[3]Q?spanQ?
Q?tdQ?
Q?trQ?
Q?tableQ?
Q?bodyQ?
Q?htmlQ?
2.asp.net代码Q?
//---------------------读html模板面到stringbuilder对象?---
string[] format=new string[4];//定义和htmlyem标记数目一致的数组
StringBuilder htmltext=new StringBuilder();
try
{
using (StreamReader sr = new StreamReader("存放模板面的\径和面?))
{
String line;
while ((line = sr.ReadLine()) != null)
{
htmltext.Append(line);
}
sr.Close();
}
}
catch
{
Response.Write("QScriptQalert('d文g错误')Q?ScriptQ?);
}
//---------------------l标记数l赋?-----------
format[0]="background="bg.jpg"";//背景囄
format[1]= "#990099";//字体颜色
format[2]="150px";//字体大小
format[3]= "QmarqueeQ生成的模板html面Q?marqueeQ?;//文字说明
//----------替换htm里的标记Z惛_的内?
for(int i=0;iQ?;i++)
{
htmltext.Replace("$htmlformat["+i+"]",format[i]);
}
//----------生成htm文g------------------―?
try
{
using(StreamWriter sw=new StreamWriter("存放路径和页面名",false,System.Text.Encoding.GetEncoding("GB2312")))
{
sw.WriteLine(htmltext);
sw.Flush();
sw.Close();
}
}
catch
{
Response.Write ("The file could not be wirte:");
}
结
用此Ҏ(gu)可以方便的生成html文g。程序用了是@环替换,因此寚w替换大量元素的模杉K度非常快?/font>
下面我们来看看需要做哪些事才能发送Email的,在这里我也找C园子里一关?NET 2.0发送Email的文章?/font> Z .NET 2.0 System.Net.Mail namespace 的邮件发送组?/font> 》,它涵盖了发送和接收邮g。在本篇里,我们只讨论如何发送的Q我感觉它那边好像没有真正用好配|文件。还要自qSmtpClient指定Stmp帐号的一些信息,事实上我们只需要通过web.config(或app.config)配置一下我们将要用的Smtp帐号Q?
<configuration>
<system.net>
<mailSettings>
<smtp from="hjf1223@tom.com">
<network host="smtp.tom.com" password=" " port="25" userName="hjf1223" defaultCredentials="false"/>
</smtp>
</mailSettings>
</system.net>
</configuration>
.NET 2.0的配|系l就是强大,我们完全不用d考Q何的资料可以非常简单的写出如上的配|了。如上,from属性就是你要从哪个邮发送EmailQhost是smtp服务器地址了,password,port,userName׃用多说了Q至于defaultCredentials需要注意了Q当我们不需要smtp服务器验证发送用hQ就它设ؓfalseQ反之就设ؓtrueQ当前大多数SMTP服务器都需要用户验证的Q所以一般情况下都就设ؓtrueQ让它用我们配|好的用户名和密码去验证是否是合法用戗?
配置文g写好了,接一来就是程序如何调用了Q等我写出如下的发送Email后,你就感到非常奇怪,真的p么简单吗Q是的,是q么单,来看看:
MailMessage m_message = new MailMessage();
m_message.From = new MailAddress("hjf1223@tom.com");
m_message.To.Add(new MailAddress("hjf1223@gmail.com"));
m_message.Subject = "使用.NET 2.0发送邮?;
m_message.Body = "非常?";
SmtpClient m_smtpClient = new SmtpClient();
m_smtpClient.Send(m_message);
我们甚至没有一句多余的代码Q就是构造一个MailMessage对象Q然后构造一个SmtpClient直接利用它发送邮件了。比起原来的静态方法,没有多一句代码。这里有的朋友可能就要问了?那smtp帐户信息哪里来呢Q其实你可以调试一下,q时候m_smtpClient对象里属性就是我们前面配|文仉|的g。在构重一个SmtpClientӞ会自动去dsystem.net配置节下的|如果用户有配|smtp信息的话Q那么它?yu)会被自动被始到当前的SmtpClient对象Q进而利用它d送Email。在.NET 2.0中发送邮件就只要做这么多工作了,而且非常E_?
ȝQ虽然在.NET 2.0下,使用System.Web.Mail发送邮件很单,在错误的时候也可以得到比较详细的异怿息,但是有时候出现的问题也会让你怸着头脑。最l常出现的是Q当你的机器有安装杀毒防火墙Q有可能会发不出邮gQ但是提CZ息却让你无法诊断是哪里出问题了,大意是邮件发送被拒绝。出现这U事冉|׃防火墙拒l了我们?5端口的用,从而造成无法与SMTP服务器正帔R信。解军_法就是关闭它了,怿|上已经有很多的案例了。还有一点要特别注意Q要发送邮件的机器必须是直接外|的Q由于公司是通过代理上网Q所以这个印象特别深?上面的代码还有一炚w要注意,MailMessage对象的From值必d配置文g中From值是一LQ这里好像也可以不用设,大家可以试一下?