基於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登錄檢測,如果需要批量檢測,把思路變化一下,遍歷需要檢測的賬號密碼,對賬號處理完成后,把結果顯示到界面上即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM