这两天一直在做用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.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>

 

这样基本上完成了.写得比较乱,希望大家能有改进意见

posted on 2007-05-23 11:55  zjz  阅读(374)  评论(0)    收藏  举报