这两天一直在做用2.0发送电子邮件 ,今天基本完工,现把过程记录下来:
其实邮件发送的代码和原理网上很多,可以搜索得到的,就不多说了.
MailMessage m_message
=
new
MailMessage();
m_message.From = new MailAddress( " translan2005@126.com " );
m_message.To.Add( new MailAddress( " webmaster@njjsk.com " ));
m_message.IsBodyHtml = true ;
m_message.Subject = " 电子邮件 " ;
m_message.Body = strHtml;
if (strPath != "" )
... {
Attachment AttObj = new Attachment(strPath);
m_message.Attachments.Add(AttObj);
}
m_message.BodyEncoding = Encoding.GetEncoding( " gb2312 " );
m_message.SubjectEncoding = Encoding.GetEncoding( " gb2312 " );
SmtpClient m_smtpClient = new SmtpClient();
// m_smtpClient.Credentials();
m_smtpClient.Send(m_message);
m_message.From = new MailAddress( " translan2005@126.com " );
m_message.To.Add( new MailAddress( " webmaster@njjsk.com " ));
m_message.IsBodyHtml = true ;
m_message.Subject = " 电子邮件 " ;
m_message.Body = strHtml;
if (strPath != "" )
... {
Attachment AttObj = new Attachment(strPath);
m_message.Attachments.Add(AttObj);
}
m_message.BodyEncoding = Encoding.GetEncoding( " gb2312 " );
m_message.SubjectEncoding = Encoding.GetEncoding( " gb2312 " );
SmtpClient m_smtpClient = new SmtpClient();
// m_smtpClient.Credentials();
m_smtpClient.Send(m_message);
因为我要把当前页面发送到邮箱当中,所以 IsBodyHtml 设为 true ,.如果将前台html都敲入到body中,会是很大工作量,在网上搜到了一段获取html的代码:
public
string
GetHtml(
string
url)
... {
string strValue = SetValue();
WebRequest objRequest = System.Net.HttpWebRequest.Create(url + "?" + strValue);
StreamReader sr = new StreamReader(objRequest.GetResponse().GetResponseStream());
string result = sr.ReadToEnd();
sr.Close();
return result;
}
... {
string strValue = SetValue();
WebRequest objRequest = System.Net.HttpWebRequest.Create(url + "?" + strValue);
StreamReader sr = new StreamReader(objRequest.GetResponse().GetResponseStream());
string result = sr.ReadToEnd();
sr.Close();
return result;
}
一开始用发送文本做测试,每次发送总是失败,诺顿返回信息"与服务器连接失败",搞了好长时间才明白是诺顿启用了Internet电子邮件自动防护的原因,在诺顿的设置中关掉后测试成功.
接下来就是测试发送页面,页面上有些radiobuttonlist和text控件需要手工填入,但是发送到邮箱中后又全都为空.只好在页面载入的时候取值
private
string
SetValue()
... {
string A = rdo_One.SelectedItem.Text;
string D = rbl1.SelectedItem.Text;
string E = RadioButtonList2.SelectedItem.Text;
string F = RadioButtonList3.SelectedItem.Text;
string G = RadioButtonList4.SelectedItem.Text;
string H = RadioButtonList5.SelectedItem.Text;
string I = txt_Hospital.Text.Trim();
string J = txt_Addr.Text.Trim();
string K = txt_Post.Text.Trim();
string L = txt_Link.Text.Trim();
return "A=" + A + "&B=" + B + "&I=" + I + "&C=" + C + "&D=" + D + "&E=" + E + "&F=" + F + "&G=" + G + "&H=" + H + "&J=" + J + "&K=" + K + "&L=" + L;
}
... {
string A = rdo_One.SelectedItem.Text;
string D = rbl1.SelectedItem.Text;
string E = RadioButtonList2.SelectedItem.Text;
string F = RadioButtonList3.SelectedItem.Text;
string G = RadioButtonList4.SelectedItem.Text;
string H = RadioButtonList5.SelectedItem.Text;
string I = txt_Hospital.Text.Trim();
string J = txt_Addr.Text.Trim();
string K = txt_Post.Text.Trim();
string L = txt_Link.Text.Trim();
return "A=" + A + "&B=" + B + "&I=" + I + "&C=" + C + "&D=" + D + "&E=" + E + "&F=" + F + "&G=" + G + "&H=" + H + "&J=" + J + "&K=" + K + "&L=" + L;
}
但是这样在本页面(Mail.aspx)获取不到这些值,只好重写另一个一样的页面(SendMail.aspx),只作为发送到邮箱后显示的页面,同时也要把传入页面的html换为新页面,并在新页面获取这些值:
SendMail.aspx.cs
protected
void
Page_Load(
object
sender, EventArgs e)
... {
lbl_B.Text = Request.QueryString["B"];
lbl_A.Text = Request.QueryString["A"];
lbl_C.Text = Request.QueryString["C"];
lbl_D.Text = Request.QueryString["D"];
lbl_E.Text = Request.QueryString["E"];
lbl_F.Text = Request.QueryString["F"];
lbl_G.Text = Request.QueryString["G"];
lbl_H.Text = Request.QueryString["H"];
lbl_I.Text = Request.QueryString["I"];
lbl_J.Text = Request.QueryString["J"];
lbl_K.Text = Request.QueryString["K"];
lbl_L.Text = Request.QueryString["L"];
}
... {
lbl_B.Text = Request.QueryString["B"];
lbl_A.Text = Request.QueryString["A"];
lbl_C.Text = Request.QueryString["C"];
lbl_D.Text = Request.QueryString["D"];
lbl_E.Text = Request.QueryString["E"];
lbl_F.Text = Request.QueryString["F"];
lbl_G.Text = Request.QueryString["G"];
lbl_H.Text = Request.QueryString["H"];
lbl_I.Text = Request.QueryString["I"];
lbl_J.Text = Request.QueryString["J"];
lbl_K.Text = Request.QueryString["K"];
lbl_L.Text = Request.QueryString["L"];
}
对了,还有配置文件差点忘了,呵呵.我用的是126的smtp
<
system.net
>
< mailSettings >
< smtp from = " username@126.com " >
< network host = " smtp.126.com " password = " pwd " port = " 25 " userName = " username@126.com " defaultCredentials = " false " />
</ smtp >
</ mailSettings >
</ system.net >
< mailSettings >
< smtp from = " username@126.com " >
< network host = " smtp.126.com " password = " pwd " port = " 25 " userName = " username@126.com " defaultCredentials = " false " />
</ smtp >
</ mailSettings >
</ system.net >
这样基本上完成了.写得比较乱,希望大家能有改进意见