另一种发送邮箱的方法和实现验证码

来源:互联网 发布:mac浏览器打开网页慢 编辑:程序博客网 时间:2024/06/03 18:29

一、发送邮箱方法如下: 

private void SendEmail()
        {
            System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();

            //设置邮件的标题
            //1)设置邮件标题
            mail.Subject =this.TextBox3.Text;

            //设置邮件的发件人
            //Pass:如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用

            //2)设定发件人邮箱和显示名称
            MailAddress from = new MailAddress("xxxxx
@qq.com", "xxxxx");
            mail.From = from;

            string address = "";
            string displayName = "";
            //如果永远都只需要发给一个收件人那么就简单了 mail.To.Add("收件人mail");
            #region 多个收件人,发一个人也可以用这个方法
            string[] mailNames = (TextBox1.Text + ";").Split(';');
            foreach (string name in mailNames)
            {
                if (name != string.Empty)
                {
                    if (name.IndexOf('<') > 0)
                    {
                        displayName = name.Substring(0, name.IndexOf('<'));
                        address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
                    }
                    else
                    {
                        displayName = string.Empty;
                        address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
                    }
                    mail.To.Add(new MailAddress(address, displayName));
                }
            }
            #endregion
            #region 添加附件
            if (FileUpload1.HasFile)
            {
                string fileName = FileUpload1.PostedFile.FileName.Trim();
                fileName = Server.MapPath(@"UpFile/") + fileName.Substring(fileName.LastIndexOf("/") + 1);
                FileUpload1.PostedFile.SaveAs(fileName); // 将文件保存至服务器*/
                mail.Attachments.Add(new Attachment(fileName));
            }
            #endregion   
            //设置邮件的抄送收件人
            //这个就简单多了,如果不想快点下岗重要文件还是CC一份给领导比较好
            if (this.TextBox2.Text!=" ")
            {
                #region 多个抄送或单个
                string[] mailName1s = (“TextBox2.Text”+ ";").Split(';');
                foreach (string name in mailName1s)
                {
                    if (name != string.Empty)
                    {
                        if (name.IndexOf('<') > 0)
                        {
                            displayName = name.Substring(0, name.IndexOf('<'));
                            address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
                        }
                        else
                        {
                            displayName = string.Empty;
                            address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
                        }
                        mail.CC.Add(new MailAddress(address, displayName));
                    }
                }
                #endregion    
            }
          
            //4)设置要发送的邮件的正文
            mail.Body =this.TextBox4.Text;
            //设置邮件的格式
            mail.BodyEncoding = System.Text.Encoding.UTF8;
            mail.IsBodyHtml = true;
            //设置邮件的发送级别
            mail.Priority = MailPriority.Normal;
            mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;

            SmtpClient client = new SmtpClient();
            //5)设置用于发送邮件的邮箱服务器的smtp地址;如果是qq,一半就是smtp.qq.com,如果是163,一般就是smtp.163.com......
            client.Host = "smtp.qq.com";
            //设置用于 SMTP 事务的端口,默认的是 25
            //client.Port = 25;
            client.UseDefaultCredentials = false;
            //6)设置发件人的邮箱的账号和密码
            //这里才是真正的邮箱登陆名和密码,比如我的邮箱地址是
hbgx@hotmail, 我的用户名为 hbgx ,我的密码是 xgbh
            client.Credentials = new System.Net.NetworkCredential("hbgx", "xgbh");
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            //都定义完了,正式发送了,很是简单吧!
            client.Send(mail);
        }

 

二、验证码

   1)添加〉新建项...〉一般处理程序     (也可以在Web窗体中写)

   在 public void ProcessRequest(HttpContext context)

{

}方法中插入

public void ProcessRequest(HttpContext context)
        {
            var Response = context.Response;
            Response.ContentType = "image/jpeg"; //需要输出图象信息 要修改HTTP头

            int size = 5;//验证码的长度

            string authCode = GetRandomNumberString(size);// 获得验证码字符

            //在生成验证码的地方将验证码放到Session中,这样在用的时候就能从Session中取出正确的验证码了
            context.Session["AuthCode"] = authCode;
            using (Bitmap theBitmap = CreateImage(authCode))// 获得验证码图片
            {
                theBitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            Response.End();
        }

2)复制两个方法

 private string GetRandomNumberString(int codeCount)
        {
            string strChoice = "2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z";
            string[] strResult = strChoice.Split(new Char[] { ',' });
            string strReturn = "";
            Random rnd = new Random();
            for (int i = 0; i < codeCount; i++)
            {
                int j = rnd.Next(strResult.Length);//随机数不能大于数组的长度
                strReturn = strReturn + strResult[j].ToString();
            }
            return strReturn;
        }

        private Bitmap CreateImage(string str_AuthCode)
        {
            int width = str_AuthCode.Length * 13;
            int height = 20;
            Random rad = new Random();
            Bitmap bmp = new Bitmap(width, height);
            using (Graphics grp = Graphics.FromImage(bmp))
            {
                grp.Clear(Color.White);//填充bmp的背景色
                grp.DrawRectangle(new Pen(Color.Red, 1), 0, 0, width - 1, height - 1);//绘制边框
                int num = width * height;
                for (int i = 0; i < num; i += 3)//在图片的指定坐标上画上有颜色的圆点
                {
                    int x = rad.Next(width);
                    int y = rad.Next(height);
                    int r = rad.Next(255);
                    int g = rad.Next(255);
                    int b = rad.Next(255);
                    Color c = Color.FromArgb(r, g, b);
                    bmp.SetPixel(x, y, c);//在图片的指定坐标上画上有颜色的圆点
                }

                using (Font f = new Font("宋体", 12, FontStyle.Bold))//定义字体
                {
                    using (Brush br = new SolidBrush(Color.Black))//定义画笔的颜色及字体的颜色
                    {
                        for (int i = 0; i < str_AuthCode.Length; i++)
                        {
                            string s = str_AuthCode.Substring(i, 1);//单个单个的将字画到图片上
                            Point p = new Point(i * 12 + rad.Next(3), rad.Next(3) + 1);//字体出现的位置(坐标)
                            grp.DrawString(s, f, br, p);//绘制字符串
                        }
                    }
                }
                return bmp;//返回
            }
        }

3)在一般处理程序中Session无法获取到,所以要添加继承

 public class Yanzhengma : IHttpHandler, IRequiresSessionState

4)在页面上显示

在页面上插入一个图片空间,src=" "写成以上代码所在的web窗体,当前的是一般处理程序的窗体。src="xxxx.ashx"

5)实现点击图片换一张验证码,即使页面刷新,写一个js代码,重新使图片控件的src为以上地址。

方法如下:

<script type="text/javascript">
        function shuaxin() {
           
            document.getElementById('img1').setAttribute('src', 'Yanzhengma.ashx);
        }
    </script>

但是仅以上代码无法实现,因为浏览器存在记忆问题,当前已经打开无法再次刷新。所以我们可以根据参数的不同来解决问题

以上方法即为:

<script type="text/javascript">
        function shuaxin() {
           
            document.getElementById('img1').setAttribute('src', 'Yanzhengma.ashx?id='+Math.random());
        }
    </script>

 

原创粉丝点击