利用邮件对象实现发送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搜通天系列软件中了,需要了解可以下载软件测试下,有宝贵意见可以相互沟通交流。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值