.net发送邮件----远程服务器返回错误: (500) 内部服务器错误。

现在在做一个发送邮件的功能。
protected void Page_Load(object sender, EventArgs e)
{
DataList1.DataSource=manager.ApplySelectAllByData();
DataList1.DataBind();
SendEmail();
}
private void SendEmail()
{
string email = Session["email"].ToString();
MailMessage mail = new MailMessage();
mail.From = "[email protected]";//发信人地址
mail.To = email;//收信人地址
mail.Subject = "预登记确认函";//主题
mail.Body = HttpContext("http://localhost:45187/HuiZUI/RegistOkShow.aspx");
//mail.Body = HttpContext("http://cn.yahoo.com/");
mail.Priority = MailPriority.High;
mail.BodyFormat = MailFormat.Html;
mail.Fields.Add("http://schemas.microsoft.com/cdo/c ... mtpauthenticate", "1");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "[email protected]");//用户名
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "Esps9Tqm1");//密码
SmtpMail.SmtpServer = "mail.expotec.com.cn";
mail.BodyFormat = MailFormat.Html;
SmtpMail.Send(mail);
}
private string HttpContext (string url)
{
System.Net.WebRequest objRequest = System.Net.HttpWebRequest.Create(url);
StreamReader sr = new StreamReader(objRequest.GetResponse().GetResponseStream(),System.Text.Encoding.Default);
string result = sr.ReadToEnd();
sr.Close();
return result;
}
================================================
以上是我写的代码。
是这样的。我有一个注册界面都是一些个人信息。然后我点击注册按钮之后提交到 这个界面(以上的代码界面)同时也对数据库的注册表进行插入
====================================================================
page_load
里面是绑定的一个数据源。绑定的是我刚插入注册表的一条最新信息。
下面两个方法 就是发送邮件的方法。email地址也是我从上个界面获取的保存在session 里的信息。可以得到
============================================================
我需要发送的是我注册完了之后提交到的这个界面 。发送的内容是整个这个界面。而不是内容。要的是界面。我也试过把 地址改成yahoo,百度 的。这样都可以发送成功。可是当我要发送这个整个界面的时候 就会报错 ,
报 :远程服务器返回错误: (500) 内部服务器错误。
=================================================================
提交过后的这个界面 绝对没问题。数据全都可以得到。可是为什么就是发送这个整页面 时就会报错呢。想不明白啊.....
什么方法?讲详细点啊!!

RegistOkShow.aspx 就是你正在执行的这个页面吗?
如果是,那就是很明显的死循环了,当然会造成IIS崩溃。
原因很简单,你执行HttpContext方法的时候,它会去读取这个页面的执行结果,而在得到RegistOkShow.aspx的时候,它又会去尝试读取这个页面的结果,如此反复,你就能很快地把自己DDOS了。

要获得当前页面的执行结果,需要用另外的方法。

-----------要善于用搜索引擎解决自己的问题---------------

/// <summary>
/// 重写渲染过程,拦截输出
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
{
//拦截内容
StringWriter strw = new StringWriter();
HtmlTextWriter w = new HtmlTextWriter(strw);
base.Render(w);
//获得内容
string content = strw.ToString(); //这里的content就是当前页面的执行结果了,然后再发送邮件。
w.Close();
strw.Close();

}
温馨提示:答案为网友推荐,仅供参考
相似回答