基于Lumisoft.NET组件的SMTP账号登陆检测

简介:

在邮件处理的方面,Lumisoft.NET可以说是非常不错的一个选择,我在前面几篇文章中都介绍过这个组件。

基于Lumisoft.NET组件开发碰到乱码等一些问题的解决

基于Lumisoft.NET组件的POP3邮件接收和删除操作

基于Lumisoft.NET组件和.NET API实现邮件发送功能的对比

我的博客内容几乎全部来源我的项目开发或者研究工作,因此对于这个组件的使用还是有一定的说服力,这个组件封装了很多底层的一些操作,对于我们操作邮件的发送、接收的处理,更加方便高效。本文主要介绍该组件一个小的应用,基于Lumisoft.NET组件的SMTP账号登陆检测。

做某种工作,一般都有一个背景知识,从背景里面,我们可以大致了解这个工作的应用场景和具体目的,这个基于SMTP账号登陆检测的功能来源我对一批邮件账号进行交替邮件发送的时候需要,我手上有一批免费邮箱的SMTP账号,可以用于邮件的发送,但是我不确信是否所有的账号密码都是可以登录使用的,因此我需要对它们进行检测,只有正确的账号密码,我才用来批量发送邮件。这种检测我希望是通过自动化进行实现,不要人工一个个登录,在偶尔的一次Lumisoft.NET组件的使用过程中,我发现它发送邮件前,都会进行账号密码的登录操作,因此如果有成功的回应,那么就算达到目的了。

Lumisoft组件里面,SMTP_Client的对象有一个Auth方法(或者Authenticate方法),并且调用后,对象本身有一个IsAuthenticated的bool属性,这样就可以达到我们的操作目的了。

具体对SMTP_Client的SMTP账号登陆检测代码如下所示。

        private bool CheckLogin(string smtp, string username, string password)
        {
            bool result = false;
            using (SMTP_Client client = new SMTP_Client())
            {
                try
                {
                    if (this.txtUseSSL.Checked)
                    {
                        client.Connect(smtp, WellKnownPorts.SMTP_SSL, true);
                    }
                    else
                    {
                        client.Connect(smtp, WellKnownPorts.SMTP, false);
                    }

                    client.EhloHelo(smtp);
                    var authhh = new AUTH_SASL_Client_Plain(username, password);
                    client.Auth(authhh);
                    //client.Authenticate(username, password);

                    result = client.IsAuthenticated;
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex);
                }
            }
            return result;
        }

为了更有效实现账号的检测,我们使用了背景线程进行处理,以达到更好的界面体验。

        private BackgroundWorker worker;

        public FrmEditMailConfig()
        {
            InitializeComponent();

            worker = new BackgroundWorker();
            worker.DoWork += new DoWorkEventHandler(worker_DoWork);
            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
        }

然后在实现账号检测的事件里面对背景线程进行调用,具体操作代码如下所示。

        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            string smtp = this.txtSmtpServer.Text.Trim();
            string username = this.txtLoginId.Text.Trim();
            string password = this.txtPassword.Text.Trim();

            bool success = CheckLogin(smtp, username, password);
            e.Result = success;
        }

这个线程处理后,会返回一个结果,然后我们在线程完成的操作里面对他们进行处理,即可实现把结果展示到界面上了。

        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            string username = this.txtLoginId.Text.Trim();
            bool success = Convert.ToBoolean(e.Result);
            if (success)
            {
                string message = string.Format("[{0}] 测试成功", username);
                MessageDxUtil.ShowTips(message);
            }
            else
            {
                string message = string.Format("[{0}] 测试失败,可能密码不正确或未开通SMTP", username);
                MessageDxUtil.ShowWarning(message);
            }
        }

当然,这个只是对一个账号密码进行SMTP登录检测,如果需要批量检测,把思路变化一下,遍历需要检测的账号密码,对账号处理完成后,把结果显示到界面上即可。

本文转自博客园伍华聪的博客,原文链接:基于Lumisoft.NET组件的SMTP账号登陆检测,如需转载请自行联系原博主。



目录
相关文章
|
6月前
|
前端开发 C# 数据库
.NET中使用BootstrapBlazor组件库Table实操篇
.NET中使用BootstrapBlazor组件库Table实操篇
163 0
|
6月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
|
移动开发 网络协议 NoSQL
.NET Core WebSocket实现简易、高性能、集群即时通讯组件
.NET Core WebSocket实现简易、高性能、集群即时通讯组件
322 0
|
27天前
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
36 1
|
5天前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
6月前
|
搜索推荐 API C#
.NET开源快速、强大、免费的电子表格组件
.NET开源快速、强大、免费的电子表格组件
|
4月前
|
存储 开发框架 前端开发
基于Lumisoft.NET组件,使用IMAP协议收取邮件
基于Lumisoft.NET组件,使用IMAP协议收取邮件
|
4月前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
5月前
|
NoSQL 大数据 Redis
分享5款.NET开源免费的Redis客户端组件库
分享5款.NET开源免费的Redis客户端组件库
|
6月前
|
SQL 开发框架 JavaScript
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
77 0