送给大家一个C#利用SMTP协议发送邮件做邮箱注册
我是用winform做的实验
asp.net也是一样
这个是发送邮箱的方法
string SendMassage(string sender,string recipient,string psd)
{
//创建一个随机数种子
Random rdm = new Random();
//初始化邮箱验证码为空字符串
mailCode = "";
//这里和验证码那里一样,就不在写注释了
string code = "1234567890loLOqwertyuipasdfghjkzxcvbnmQWERTYUIPASDFGHJKZXCVBNM";
for (int i = 0; i < 6; i++)
{
mailCode += code[rdm.Next(0, code.Length)].ToString();
}
//实例化一个MailMessage对象用来设置邮件的信息
MailMessage msg = new MailMessage();
msg.To.Add(recipient);//收件人
msg.From = new MailAddress(sender, "冷文博客");//发件人
msg.Subject = "注册信息";//标题
msg.SubjectEncoding = Encoding.UTF8;//标题编码
//正文
msg.Body = "这封信是由 -【冷文博客】-官方 发送的。\r\n\r\n您的验证码为:" + mailCode + "\r\n\r\n您收到这封" +
"邮件,是由于在 -【冷文博客】-官网 获取了新用户注册地址使用 了这个邮箱地址。如果您并没有访问过 -【冷文博客】-" +
"官网,或没有进行上述操作,请忽 略这封邮件。您不需要退订或进行其他进一步的操作。";
msg.BodyEncoding = Encoding.UTF8;//正文编码
SmtpClient client = new SmtpClient();//实例化一个邮箱客户端
client.Host = "smtp.qq.com";//设置邮箱主机 这个是qq的,网易126为 smtp.126.com ,这个你用那个邮箱就去百度找找
client.Port = 587;//端口号
client.EnableSsl = true;//是否ssl加密 现在好像都是加密的 所以这里一般都写true
client.Credentials = new NetworkCredential(sender, psd);//凭证,这里的密码你去登录你邮箱的后台找到里面的客户端登录的密码,一般它和帐户密码不一样
try//捕获异常
{
client.Send(msg);
return "成功";//没抛异常,说明发送成功
}catch(Exception e)
{
//如果抛异常就将其异常信息返回
return e.ToString();
}
}
这是生成验证码的方法
Image GetVerifyCode()
{
int r = 30;
//创建一个Bitmap的对象,即电脑上的bmp格式的文件
Bitmap bmp = new Bitmap(180, 45);
//实例化一个Graphics对象,这次画这个验证码主要就靠它
Graphics gra = Graphics.FromImage(bmp);
//填充这个矩形为白色
gra.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, 180, 45));
string code = "23456789qwertyuipasdfghjkzxcvbnmQWERTYUIPASDFGHJKZXCVBNM";//验证码文本就是从这个字符串中随机的取出
string[] fonts = { "黑体", "楷体", "微软雅黑", "宋体", "隶书" };//随机从这里取出字体
Color[] colors = { Color.Red, Color.Black, Color.Green, Color.Gray, Color.Blue };//随机从中取颜色
FontStyle[] fStyle = { FontStyle.Bold, FontStyle.Italic, FontStyle.Regular, FontStyle.Strikeout, FontStyle.Underline };//随机从中取字体样式
//创建一个随机数种子
Random rdm = new Random();
//初始化验证码文本为空字符串
codeTxt = "";
//对验证码文本进行赋值
for (int i = 0; i < 6; i++)
{
codeTxt += code[rdm.Next(0, code.Length)].ToString();
}
//Console.WriteLine(codeTxt);
//画验证码
for (int i = 0; i < 6; i++)
{
//将整个图片分成六部分,每个字母的坐标都随机出现在每部分
Point p = new Point(i * r + rdm.Next(0, 15), rdm.Next(0, 15));
Font f = new Font(fonts[rdm.Next(0, 5)], rdm.Next(20,25), fStyle[rdm.Next(0, 5)]);//随机选择一个字体
gra.DrawString(codeTxt[i].ToString(), f, new SolidBrush(colors[rdm.Next(0, colors.Length)]), p);//画验证码
}
//画干扰线
for (int i = 0; i < 20; i++)
{
Point p1 = new Point(rdm.Next(0, bmp.Width), rdm.Next(0, bmp.Height));
Point p2 = new Point(rdm.Next(0, bmp.Width), rdm.Next(0, bmp.Height));
gra.DrawLine(new Pen(colors[rdm.Next(0, colors.Length)]), p1, p2);
}
//画干扰点
for (int i = 0; i < 150; i++)
{
Point p1 = new Point(rdm.Next(0, bmp.Width), rdm.Next(0, bmp.Height));
bmp.SetPixel(p1.X, p1.Y, colors[rdm.Next(0, colors.Length)]);
}
return bmp;
}
看看效果吧