这两天一直在做用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);
因为我要把当前页面发送到邮箱当中,所以 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; }
一开始用发送文本做测试,每次发送总是失败,诺顿返回信息"与服务器连接失败",搞了好长时间才明白是诺顿启用了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; }
但是这样在本页面(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 " ]; }
对了,还有配置文件差点忘了,呵呵.我用的是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
>
这样基本上完成了.写得比较乱,希望大家能有改进意见