• 利用邮件对象实现发送QQ日志以及检测用户是否开通SMTP功能


    本文介绍两个QQ应用中有意思的小功能,都是基于邮件对象实现的功能,一个是利用.NET 内置类MailMessage来实现日志发送功能,一个是利用Lumisoft.NET组件类来检测用户是否开通了SMTP功能。

    想看看两个功能的实现效果。

     



    编辑并发送QQ日志的代码很简单,就是简单利用MailMessage对象来实现的,类似发送邮件一样,详细代码如下所示:

                try
                {
                    MailMessage mail 
    = new MailMessage();
                    mail.From 
    = new MailAddress(string.Format("{0}@qq.com", Portal.gc.QQ));
                    mail.To.Add(
    new MailAddress(string.Format("{0}@qzone.qq.com", Portal.gc.QQ)));
                    
    string title = this.txtTitle.Text;
                    
    if (!string.IsNullOrEmpty(title))
                    {
                        title 
    = string.Format("[{0}]{1}"this.txtCategory.Text, this.txtTitle.Text);
                    }
                    mail.Subject 
    = title;
                    mail.Body 
    = this.txtContent.Text;
                    SmtpClient client 
    = new SmtpClient("smtp.qq.com"25);
                    client.Credentials 
    = new NetworkCredential(Portal.gc.QQ, Portal.gc.QQPass);
                    client.Send(mail);

                    MessageExUtil.ShowTips(
    "QQ留言发表成功!");
                    
    this.txtTitle.Clear();
                    
    this.txtContent.Clear();
                }
                
    catch (Exception ex)
                {
                    LogTextHelper.WriteLine(ex.ToString());
                    MessageExUtil.ShowError(ex.Message);
                }

    批量检查开通SMTP功能的代码如下所示:

            private void StartAtClick(object obj)
            {
                
    if (this.dg.Rows.Count == 0 || this.dg.SelectedRows.Count == 0)
                {
                    SetTips(
    "请先输入资料,并选定一个开始");
                    
    return;
                }

                
    string selectQQ = "";
                
    foreach (DataGridViewRow row in this.dg.SelectedRows)
                {
                    selectQQ 
    = row.Cells["账号"].Value.ToString();
                    
    break;
                }

                QQDict.Clear();
                QQList.Clear();
                
    foreach (DataGridViewRow row in this.dg.Rows)
                {
                    
    string qq = row.Cells["账号"].Value.ToString();
                    
    string pass = row.Cells["密码"].Value.ToString();
                    
    if (!string.IsNullOrEmpty(qq) && !QQDict.ContainsKey(qq))
                    {
                        QQDict.Add(qq, pass);
                        QQList.Add(qq);
                    }
                }

                
    int current = QQList.IndexOf(selectQQ);
                
    if (QQDict.Count > 0 && current >= 0)
                {
                    isStart 
    = true;
                    currentIndex 
    = current;
                    StartQQAt();
                }
            }

            
    private void StartQQAt()
            {
                
    if (!isStart || QQDict.Count == 0)
                    
    return;

                
    if (currentIndex >= QQDict.Count)
                {
                    isStart 
    = false;
                    SetTips(
    "已经是最后一个QQ");
                    
    return;
                }

                
    string qq = QQList[currentIndex];
                
    string pass = QQDict[qq];
                
    if (!string.IsNullOrEmpty(qq))
                {
                    CallCtrlWithThreadSafety.SetText(
    this.lblOperateTips, string.Format("正在处理QQ[{0}]...", qq), this);
                    CallCtrlWithThreadSafety.SetText(
    this.txtQQNumber, qq, this);
                    Application.DoEvents();
                    Thread.Sleep(
    100);

                    CheckSmtpOpen(qq, pass);
                }
            }

            
    private void CheckSmtpOpen(string user, string pass)
            {
                
    bool success = CheckLogin(user, pass);
                
    if (success)
                {
                    SetTips(
    string.Format("QQ用户[{0}] 测试成功", user));

                    
    if (!SuccessList.Contains(user))
                    {
                        SuccessList.Add(user);
                        
    if (failedList.Contains(user))
                        {
                            failedList.Remove(user);
    //移除成功的数据
                        }
                        UpdateList();
                    }
                }
                
    else
                {
                    
    if (!failedList.Contains(user))
                    {
                        failedList.Add(user);
                        UpdateList();
                    }
                    SetTips(
    string.Format("QQ用户[{0}] 测试失败,可能密码不正确或未开通SMTP", user));
                }

                Interlocked.Increment(
    ref currentIndex);
                StartQQAt();
            }

            
    private bool CheckLogin(string user, string pass)
            {
                
    bool result = false;
                
    using (SMTP_Client client = new SMTP_Client())
                {
                    
    try
                    {
                        
    //匹配使之可以用于其它邮箱
                        string smtp = "smtp.qq.com";
                        
    int atIndex = user.IndexOf("@");
                        
    if (atIndex > 0)
                        {
                            smtp 
    = "smtp." + user.Substring(atIndex + 1);
                        }
                        
    if(user.Contains("@163.com"))
                        {
                            user 
    = user.Replace("@163.com""");
                        }

                        client.Connect(smtp, WellKnownPorts.SMTP_SSL, 
    true);
                        client.Authenticate(user, pass);
                        
    string helloText = client.GreetingText;
                        
    if (helloText.Contains("220"))
                        {
                            result 
    = true;
                        }
                    }
                    
    catch (Exception ex)
                    {
                        ;
                    }
                }
                
    return result;
            }

            
    private void SetTips(string tips)
            {
                CallCtrlWithThreadSafetyEx.SetText(
    this.lblOperateTips, tips);
                CallCtrlWithThreadSafetyEx.SetText(
    this.tsslTipsLable, tips);
                Application.DoEvents();
                Thread.Sleep(
    20);
            }

            
    private void UpdateList()
            {
                
    try
                {
                    
    this.lstFailed.Invoke(new MethodInvoker(delegate()
                    {
                        
    this.lstFailed.Items.Clear();
                        
    foreach (string item in failedList)
                        {
                            
    this.lstFailed.Items.Add(item);
                        }
                        
    this.lstFailed.Refresh();
                    }));
                    
    this.lstSuccess.Invoke(new MethodInvoker(delegate()
                    {
                        
    this.lstSuccess.Items.Clear();
                        
    foreach (string item in SuccessList)
                        {
                            
    this.lstSuccess.Items.Add(item);
                        }
                        
    this.lstSuccess.Refresh();
                    }));
                }
                
    catch (Exception ex)
                {
                    LogTextHelper.WriteLine(ex.ToString());
                }
            }

     其中利用了Lumisoft.NET的SMTP_Client对象来检测是否服务器应答的内容,如果含有220就表示支持SMTP了,呵呵,是不是很简单呢,其实上面的代码最为重要的就是下面这部分而已。

    using (SMTP_Client client = new SMTP_Client())
                {
                    
    try
                    {
                        
    //匹配使之可以用于其它邮箱
                        string smtp = "smtp.qq.com";
                        
    int atIndex = user.IndexOf("@");
                        
    if (atIndex > 0)
                        {
                            smtp 
    = "smtp." + user.Substring(atIndex + 1);
                        }
                        
    if(user.Contains("@163.com"))
                        {
                            user 
    = user.Replace("@163.com""");
                        }

                        client.Connect(smtp, WellKnownPorts.SMTP_SSL, 
    true);
                        client.Authenticate(user, pass);
                        
    string helloText = client.GreetingText;
                        
    if (helloText.Contains("220"))
                        {
                            result 
    = true;
                        }
                    }
                    
    catch (Exception ex)
                    {
                        ;
                    }
                }


    其他部分就是为了实现一个循环机批量的过程而已。本随便介绍的功能,都已经集成的我的软件QQ搜通天系列软件中了,需要了解可以下载软件测试下,有宝贵意见可以相互沟通交流。 

    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    Idea中SpringBoot热部署搭建
    Redis 集群搭建
    centos7 vsftp搭建
    Centos 7 安装jdk
    Centos7 安装nginx
    Xshell 连接Linux
    python 的mysql 操作
    NIO/BIO
    java基础-3
    java基础-2
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/1913186.html
Copyright © 2020-2023  润新知