C#接入SMTP邮件服务
我的个人博客
引入SMTP服务包
//引入邮件服务包
using System.Net.Mail;
using System.Net;
这两个引用用于C#接入邮件的SMTP服务
控件页面

定时器
为了给用户更好的体验,我们使用定时器,给用户看到具体剩余时间

开始创建一个功能类
新建一个类
MailVeriCodeClass,里面定义好各类功能函数
首先引入必要的命名空间
//发送邮件需要引用的命名空间
using System.Net.Mail;
using System.Net;
//正则验证引用
using System.Text.RegularExpressions;
功能类代码
public class MailVeriCodeClass
{
#region 邮箱验证码功能
/// <summary>
/// 生成随机验证码
/// </summary>
/// <param name="CodeLength">验证码长度</param>
public static string CreateRandomMailCode(int CodeLength)
{
int randNum;
char code;
string randomCode = String.Empty;//随机验证码
//生成一定长度的随机验证码
//Random random = new Random();//生成随机数对象
for (int i = 0; i < CodeLength; i++)
{
//利用GUID生成6位随机数
byte[] buffer = Guid.NewGuid().ToByteArray();//生成字节数组
int seed = BitConverter.ToInt32(buffer, 0);//利用BitConvert方法把字节数组转换为整数
Random random = new Random(seed);//以生成的整数作为随机种子
randNum = random.Next();
//randNum = random.Next();
if (randNum % 3 == 1)
{
code = (char)('A' + (char)(randNum % 26));//随机大写字母
}
else if (randNum % 3 == 2)
{
code = (char)('a' + (char)(randNum % 26));//随机小写字母
}
else
{
code = (char)('0' + (char)(randNum % 10));//随机数字
}
randomCode += code.ToString();
}
return randomCode;
}
/// <summary>
/// 发送邮件验证码
/// </summary>
/// <param name="MyEmailAddress">发件人邮箱地址</param>
/// <param name="RecEmailAddress">收件人邮箱地址</param>
/// <param name="Subject">邮件主题</param>
/// <param name="MailContent">邮件内容</param>
/// <param name="AuthorizationCode">邮箱授权码</param>
/// <returns></returns>
public static bool SendMailMessage(string MyEmailAddress, string RecEmailAddress, string Subject, string Body, string AuthorizationCode)
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress(MyEmailAddress);//发件人邮箱地址
mail.To.Add(new MailAddress(RecEmailAddress));//收件人邮箱地址
mail.Subject = Subject;//邮件标题
mail.Body = Body; //邮件内容
mail.Priority = MailPriority.High;//优先级
SmtpClient client = new SmtpClient();//qq邮箱:smtp.qq.com;126邮箱:smtp.126.com
client.Host = "smtp.qq.com";
client.Port = 587;//SMTP端口465或587
client.EnableSsl = true;//使用安全加密SSL连接
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Credentials = new NetworkCredential(MyEmailAddress, AuthorizationCode);//验证发件人身份(发件人邮箱,邮箱授权码);
try
{
client.Send(mail);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "发送失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
return true;
}
/// <summary>
/// 验证QQ邮箱
/// </summary>
/// <param name="mail">邮箱</param>
/// <returns></returns>
public static bool CheckMail(string mail)
{
string str = @"^[1-9][0-9]{4,}@qq.com$";
Regex mReg = new Regex(str);
if (mReg.IsMatch(mail))
{
return true;
}
return false;
}
#endregion
}
功能类已经写好了,每个方法对应有注释,不需要动,除非你要更改smtp服务器,默认QQ邮箱
窗体类代码
首先定义全局
/// <summary>
/// 定义控件全局
/// </summary>
int seconds1 = 60;//倒计时60s
int seconds2 = 60 * 2;//验证码有效时间5分钟
string strMailVeriCode;//验证码
获取验证码后计时事件
/// <summary>
/// 按钮控件获取验证码后计时事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
if (seconds1 > 0)
{
seconds1--;
btnMailVeriCode.Text = "剩余" + seconds1.ToString() + "秒";
}
else
{
timer1.Stop();
btnMailVeriCode.Text = "获取验证码";
btnMailVeriCode.Enabled = true;
}
}
此事件为第一个timer控件的事件
验证码过期后事件
/// <summary>
/// 验证码过期事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer2_Tick_1(object sender, EventArgs e)
{
if (seconds2 == 0)
{
timer2.Stop();
//旧的验证码过期,生成一个新的验证码
strMailVeriCode = MailVeriCodeClass.CreateRandomMailCode(6);
}
}
此事件为第二个timer控件的事件
点击获取验证码(按钮点击事件)
/// <summary>
/// 获取验证码点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMailVeriCode_Click_1(object sender, EventArgs e)
{
string recEMailAddress = txtMail.Text.Trim();//收件人邮箱
strMailVeriCode = MailVeriCodeClass.CreateRandomMailCode(6);
string strBody = "验证码:" + strMailVeriCode + ",2分钟内有效,请勿泄漏于他人。如非本人操作,请忽略。系统邮件请勿回复。";//邮件内容
string strSubject = "【极简科技】注册验证";//邮件标题
string strMyEmailAddress = "747945307@qq.com";//发件人邮箱
string strAuthorizationCode = "klxtvclkyfu*****";//邮箱授权码
if (string.IsNullOrEmpty(recEMailAddress))//判断是否输入了邮箱
{
MessageBox.Show("请输入邮箱!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtMail.Focus();
}
else if (MailVeriCodeClass.CheckMail(recEMailAddress) == false)//判断邮箱格式是否正确
{
MessageBox.Show("您输入的QQ邮箱有误,请重新输入!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
txtMail.Focus();
return;
}
else//发送验证码
{
//发送
if (MailVeriCodeClass.SendMailMessage(strMyEmailAddress, recEMailAddress, strSubject, strBody, strAuthorizationCode) == true)
{
btnMailVeriCode.Enabled = false;
//计时器初始化
timer1.Interval = 1000;
timer1.Start();
timer2.Interval = 1000;
timer2.Start();
}
else
{
txtMail.Focus();
}
}
}
在这三句代码配置好SMTP服务
string strSubject = "【极简科技】注册验证";//邮件标题
string strMyEmailAddress = "747945307@qq.com";//发件人邮箱
string strAuthorizationCode = "klxtvclkyfu*****";//邮箱授权码
但是注意,这里的邮箱授权码不是邮箱密码,而是SMTP授权码!
SMTP开启并获取授权码

到这然后往下看

以QQ邮箱为例,首先开启上面箭头所指的SMTP服务,随便开一个都可以
然后点击下面箭头指向的生成授权码,这个就是你的SMTP授权码
验证验证码是否正确
/// <summary>
/// 验证码确认按钮点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnConfirm_Click_1(object sender, EventArgs e)
{
string mailVeriCode = txtMailVeriCode.Text.Trim();//邮箱验证码
//判断验证码
if (string.IsNullOrEmpty(mailVeriCode) == true)
{
MessageBox.Show("请输入验证码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtMailVeriCode.Focus();
}
else if (mailVeriCode.ToLower() != strMailVeriCode.ToLower())//判断邮箱验证码是否输入正确;不区分字母大小写
{
MessageBox.Show("您输入的验证码有误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
txtMailVeriCode.Focus();
return;
}
else
{
MessageBox.Show("验证成功!");
}
}
这里是确认按钮的点击事件,判断验证码是否准确无误
运行实例
到这就完成了,看看效果
C#接入SMTP邮件服务的更多相关文章
- 免费SMTP邮件服务:Mandrill,Sendgrid,Mailjet,Postmarkapp,MailChimp
免费的SMTP发邮件服务平常几乎都没有怎么关注,Wordpress发邮件几乎用普通的邮箱的SMTP服务就可以完成任务,但是自从用了Discourse.Ghost博客后,发现找到一个合适的.免费配额大的 ...
- php 中引入邮箱服务 , 利用第三方的smtp邮件服务
项目中用短信通知有时间限制,对一些频率比较大的信息力不从心. 使用邮箱发送信息是个不错的选择\(^o^)/! 首先要注册一个邮箱,在邮箱设置里开通smtp功能. 简单介绍下smtp,大概就是第三方客户 ...
- centos 邮件服务 腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25 收邮件协议:pop3 端口110 iredmail安装配置 使用邮箱系统 第三十一节课
centos 邮件服务 腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25 收邮件协议:pop3 端口110 iredmail安装配置 ...
- Windows Server 2008R2 设置SMTP邮件转发服务
最近因业务需求在Windows Server 2008R2server上设置SMTP转发服务,主要是在业务审批过程中邮件通知相关人员审批情况, 1.在server上加入服务 2.打开服务 3.新建一个 ...
- python SMTP邮件发送(转载)
Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...
- C# SMTP邮件发送 分类: C# 2014-07-13 19:10 334人阅读 评论(1) 收藏
邮件发送在网站应用程序中经常会用到,包括您现在看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,做了一个客户端Demo,希望对有需要的童鞋有所帮助: 核心代码: ...
- C# SMTP邮件发送 分类: C# 2014-07-13 19:10 333人阅读 评论(1) 收藏
邮件发送在网站应用程序中经常会用到,包括您现在看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,做了一个客户端Demo,希望对有需要的童鞋有所帮助: 核心代码: ...
- (转) 关于Oracle EBS邮件服务无法使用的报错
来源http://blog.itpub.net/23850820/viewspace-1060596/ 也可以检查如下网站:http://blog.sina.com.cn/s/blog_5b021b4 ...
- python学习笔记(SMTP邮件发送:带附件)
博主有段时间没有更新博客了 先整理一个之前整理过的SMTP邮件发送,这次是带附件的功能 #!/usr/bin/env python # -*- coding: utf_8 -*- from email ...
随机推荐
- CF1545X Codeforces Round #732
A. AquaMoon and Strange Sort 叉人题 如果数字各不相同,只需要统计每个数参与构成的逆序对总数,如果是奇数一定最终朝左,偶数朝右.无意义的数字交换对方向是没有影响的 继续考虑 ...
- Web,RESTful API 在微服务中的作用是什么?
微服务架构基于一个概念,其中所有服务应该能够彼此交互以构建业务功能.因 此,要实现这一点,每个微服务必须具有接口.这使得 Web API 成为微服务的一 个非常重要的推动者.RESTful API 基 ...
- Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
Redisson.Jedis.lettuce 等等,官方推荐使用 Redisson.
- vmware克隆Centos虚拟机网卡无法启动问题
快速处理办法: cat /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i '/UUID/d' /etc/sysconfig/network-script ...
- 学习zabbix(六)
实验环境 实验用2到2台机器,实验所用机器系统环境如下,可以看到2台机器的主机名和IP地址 ? 1 2 3 4 5 6 7 8 9 10 [root@linux-node1 ~]# cat /etc/ ...
- Python学习--21天Python基础学习之旅(Day03、Day04)
关于缩进问题,缩进几个空格都不影响程序解释(不会报错什么的),但一般缩进四个空格是为了可读性和规范. Day03: Chapter 5 1.if语句 1.1条件测试:值为True或False的表达式成 ...
- HMS Core 分析服务 6.4.1版本上线啦,快来看看更新了哪些内容。
更新概览 支持转化事件回传至华为应用市场商业推广,便捷归因,实时调优. 卸载分析模型支持用户卸载前事件和路径分析,深度剖析卸载根因. 实时漏斗体验开放,灵活定位异常流失. 详情介绍 更新一:全面开放深 ...
- C++中sort()函数使用介绍
sort()简介 为什么选择使用sort() 在刷题的时候我们经常会碰到排序的问题,如果我们不使用一些排序的方法那我们只能手撕排序,这样就会浪费一些时间.而且我们还需要根据需要去选择相关的排序方法: ...
- css样式权重优先级,css样式优先级
原文:http://www.bkjia.com/Javascri... 样式选择器权重优先级: important > 内嵌样式 > ID > 类 > 标签 | 伪类 | 属性 ...
- python-图的字典表示
图的字典表示.输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度.比如上图0点表示:{'O':{'A':2,'B':5,'C':4}}.用eval函数处理输入,eva ...