精华内容
下载资源
问答
  • java实现POP3邮件客户端 完整项目包:http://yunpan.cn/QiVGqacT6uNAj (提取码:05b4) 第一步:利用socket编程,在客户端与服务器端之间建立TCP连接,POP3默认端口号为110; 第二步:通过pop3定义的各种命令...

    java实现POP3邮件客户端

     

    完整项目包:http://yunpan.cn/QiVGqacT6uNAj (提取码:05b4)

    第一步:利用socket编程,在客户端与服务器端之间建立TCP连接,POP3默认端口号为110;

    第二步:通过pop3定义的各种命令,用户可以操作自己的邮箱。

    注:

    POP3协议中有三种状态,认正状态,处理状态,和更新状态。 命令的执行可以改变协议的状态,而对于具体的某命令,它只能在具体的某状态下使用,这些请参看表1和RFC193。

    客户机与服务器刚与服务器建立连接时,它的状态为认证状态;一旦客户机提供了自己身份并被成功地确认,即由认可状态转入处理状态; 在完成相应的操作后客户机发出QUIT命令(具体说明见后续内容),则进入更新状态,更新之后又重返认可状态;当然在认可状态下执行QUIT命令,可释放连接。状态间的转移如图 1所示。

    ---建立连接---|认可|--认证成功--|处理|--执行QUIT--|更新|        

                |_______ -QUIT结束_________________|

    ddddddd

     

    常用命令:

    命令

    参数

    使用在何种状态中

    描述

    USER

    Username

    认证

    此命令与下面的pass命令若成功,将导致状态转换

    PASS

    Password

    认证

    此命令若成功,状态转化为更新

    APOP

    Name,Digest

    认证

    Digest是MD5消息摘要

    STAT

    None

    处理

    请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数

    UIDL

    [Msg#](邮件号,下同)

    处理

    返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的

    LIST

    [Msg#]

    处理

    返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的

    RETR

    [Msg#]

    处理

    返回由参数标识的邮件的全部文本

    DELE

    [Msg#]

    处理

    服务器将由参数标识的邮件标记为删除,由QUIT命令执行

    TOP

    [Msg#]

    处理

    服务器将返回由参数标识的邮件的邮件头+前n行内容,n必须是正整数

    NOOP

    None

    处理

    服务器返回一个肯定的响应,用于测试连接是否成功

    QUIT

    None

    处理、认证

    1)        如果服务器处于“处理”状态,么将进入“更新”状态以删除任何标记为删除的邮件,并重返“认证”状态。

    2)        如果服务器处于“认证”状态,则结束会话,退出连接

     

    代码:

     

      1 /**
      2  * @author hewenwu
      3  * 这个程序实现了基于POP3协议的邮件接收功能
      4  * */
      5 package mail;
      6 
      7 import java.io.BufferedReader;
      8 import java.io.BufferedWriter;
      9 import java.io.IOException;
     10 import java.io.InputStreamReader;
     11 import java.io.OutputStreamWriter;
     12 import java.io.UnsupportedEncodingException;
     13 import java.net.Socket;
     14 import java.net.UnknownHostException;
     15 import java.util.StringTokenizer;
     16 
     17 public class POP3Client {
     18 
     19     private Socket socket = null;
     20  
     21     private boolean debug=true;
     22  
     23     public static void main(String[] args) throws UnknownHostException, IOException {
     24   
     25         String server="pop3.163.com";//POP3服务器地址
     26   
     27         String user="**********";//用户名,填写自己的邮箱用户名
     28   
     29         String password="*********";//密码,填写自己的密码
     30  
     31         POP3Client pop3Client=new POP3Client(server,110);
     32  
     33     pop3Client.recieveMail(user,password);
     34  }
     35  
     36     /*构造函数*/
     37     public POP3Client(String server,int port) throws UnknownHostException, IOException{
     38         try{
     39    
     40             socket=new Socket(server,port);//在新建socket的时候就已经与服务器建立了连接
     41 
     42         }catch(Exception e){
     43    
     44             e.printStackTrace();
     45  
     46         }finally{
     47  
     48             System.out.println("建立连接!");
     49         }
     50     }
     51  
     52     
     53     //接收邮件程序
     54     public boolean recieveMail(String user,String password){
     55             
     56         try {
     57                 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
     58        
     59                 BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
     60       
     61                 user(user,in,out);//输入用户名
     62        
     63                 System.out.println("user 命令执行完毕!");
     64                 
     65                 pass(password,in,out);//输入密码
     66       
     67                 System.out.println("pass 命令执行完毕!");
     68       
     69                 stat(in,out);
     70       
     71                 System.out.println("stat 命令执行完毕!");
     72                 
     73                 list(in,out);
     74                   
     75                 System.out.println("list 命令执行完毕!");
     76                 
     77                 retr(2,in,out);
     78                 
     79                 System.out.println("retr 命令执行完毕!");
     80       
     81                 quit(in,out);
     82                 
     83                 System.out.println("quit 命令执行完毕!");
     84      
     85             }catch(Exception e){
     86       
     87                 e.printStackTrace();
     88       
     89                 return false;
     90             }
     91             return true;
     92         }
     93     
     94     //得到服务器返回的一行命令
     95     public String getReturn(BufferedReader in){
     96     
     97         String line="";
     98   
     99         try{
    100             line=in.readLine();
    101    
    102             if(debug){
    103    
    104                 System.out.println("服务器返回状态:"+line);
    105             }
    106         }catch(Exception e){
    107  
    108             e.printStackTrace();
    109         }
    110         return line;
    111     }
    112  
    113     //从返回的命令中得到第一个字段,也就是服务器的返回状态码(+OK或者-ERR)
    114     public String getResult(String line){
    115 
    116         StringTokenizer st=new StringTokenizer(line," ");
    117 
    118         return st.nextToken();
    119     }
    120  
    121     //发送命令
    122     private String sendServer(String str,BufferedReader in,BufferedWriter out) throws IOException{
    123         
    124         out.write(str);//发送命令
    125  
    126         out.newLine();//发送空行
    127  
    128         out.flush();//清空缓冲区
    129   
    130         if(debug){
    131   
    132             System.out.println("已发送命令:"+str);
    133          }
    134          return getReturn(in);
    135      }
    136  
    137     //user命令
    138     
    139     public void user(String user,BufferedReader in,BufferedWriter out) throws IOException{
    140 
    141         String result = null;
    142  
    143         result=getResult(getReturn(in));//先检测连接服务器是否已经成功
    144  
    145         if(!"+OK".equals(result)){
    146    
    147             throw new IOException("连接服务器失败!");
    148         }
    149  
    150         result=getResult(sendServer("user "+user,in,out));//发送user命令
    151 
    152         if(!"+OK".equals(result)){
    153   
    154             throw new IOException("用户名错误!");
    155         }
    156     }
    157  
    158     //pass命令
    159     public void pass(String password,BufferedReader in,BufferedWriter out) throws IOException{
    160  
    161         String result = null;
    162  
    163         result = getResult(sendServer("pass "+password,in,out)); 
    164  
    165         if(!"+OK".equals(result)){
    166 
    167             throw new IOException("密码错误!");
    168         }
    169     }
    170 
    171     
    172     //stat命令
    173 
    174     public int stat(BufferedReader in,BufferedWriter out) throws IOException{
    175  
    176         String result = null;
    177  
    178         String line = null;
    179   
    180         int mailNum = 0;
    181  
    182         line=sendServer("stat",in,out); 
    183  
    184         StringTokenizer st=new StringTokenizer(line," ");
    185   
    186         result=st.nextToken();
    187   
    188         if(st.hasMoreTokens())
    189  
    190             mailNum=Integer.parseInt(st.nextToken());
    191  
    192         else{
    193             
    194             mailNum=0;
    195             
    196         }
    197         
    198         if(!"+OK".equals(result)){
    199  
    200             throw new IOException("查看邮箱状态出错!");
    201         }
    202  
    203         System.out.println("共有邮件"+mailNum+"封");
    204         return mailNum;
    205  }
    206     
    207         //无参数list命令
    208         public void list(BufferedReader in,BufferedWriter out) throws IOException{
    209      
    210             String message = "";
    211      
    212             String line = null;
    213      
    214             line=sendServer("list",in,out); 
    215      
    216             while(!".".equalsIgnoreCase(line)){
    217        
    218                 message=message+line+"\n";    
    219             
    220                 line=in.readLine().toString();
    221                 }
    222             
    223                 System.out.println(message);
    224      }
    225         
    226           //带参数list命令
    227                 public void list_one(int mailNumber ,BufferedReader in,BufferedWriter out) throws IOException{
    228 
    229                     String result = null;
    230                      
    231                     result = getResult(sendServer("list "+mailNumber,in,out)); 
    232              
    233                     if(!"+OK".equals(result)){
    234 
    235                         throw new IOException("list错误!");
    236                     }
    237              }
    238  
    239  //得到邮件详细信息
    240  
    241     public String getMessagedetail(BufferedReader in) throws UnsupportedEncodingException{
    242  
    243         String message = "";
    244   
    245         String line = null;
    246  
    247         try{
    248             line=in.readLine().toString();
    249   
    250             while(!".".equalsIgnoreCase(line)){
    251    
    252                 message=message+line+"\n";
    253    
    254                 line=in.readLine().toString();
    255             }
    256         }catch(Exception e){
    257   
    258             e.printStackTrace();
    259         }
    260     
    261             return message;
    262     }
    263  
    264  //retr命令
    265     public void retr(int mailNum,BufferedReader in,BufferedWriter out) throws IOException, InterruptedException{
    266   
    267             String result = null;
    268    
    269             result=getResult(sendServer("retr "+mailNum,in,out));
    270   
    271             if(!"+OK".equals(result)){
    272   
    273                 throw new IOException("接收邮件出错!");
    274             }
    275             
    276             System.out.println("第"+mailNum+"封");
    277             System.out.println(getMessagedetail(in));
    278             Thread.sleep(3000);
    279     }
    280  
    281     //退出
    282     public void quit(BufferedReader in,BufferedWriter out) throws IOException{
    283  
    284         String result;
    285  
    286         result=getResult(sendServer("QUIT",in,out));
    287  
    288         if(!"+OK".equals(result)){
    289   
    290             throw new IOException("未能正确退出");
    291         }
    292     }
    293  
    294 }

    总结:

        这个项目其实非常简单,关键要理解两个方面,一是怎么利用socket编程连接到服务器,二是POP3协议命令的格式和返回值的格式。理解了这两个方面,就好做了。首先建立连接,然后通过socket对象获取输入输出流对象,在输入输出流对象上发送命令和接受返回值,接收到返回值之后自己本地处理这些返回值就行啦。

    说到输入输出流,java的输入输出流真的比较多,有点不好记,但是每个输出流的原理是一样,而且有封装的特性。接下来一定要狠狠的把它搞懂了!

     

     

     

     

    转载于:https://www.cnblogs.com/hewenwu/p/3713236.html

    展开全文
  • 发邮件时使用的SMTP协议,收邮件则是POP3协议,Java,Eclispse开发,界面JFrame,QQ邮箱POP3服务器一直连不上,所有我就用163邮箱了。 功能则是可以进行简单的邮件收发
  • POP3 电子邮件获取

    2009-04-25 18:14:27
    POP3邮件获取,smtp 电子邮件发送,很好的一个DLL
  • 我经常在使用贡献者的功能发送邮件目标时遇到一些麻烦。 所有这些函数都使用 java 类。 使用 java 包 jgmail,从一开始就一切正常。 jgmail 包具有完整的(我认为)方法,涉及 POP3 和 SMPT 操作的所有功能,您可能...
  • java实现POP3邮件客户端 java实现POP3邮件客户端 第一步:利用socket编程,在客户端与服务器端之间建立TCP连接,POP3默认端口号为110; 第二步:通过pop3定义的各种命令,用户可以操作自己的邮箱。 注: POP3...

    java实现POP3邮件客户端

    java实现POP3邮件客户端

    第一步:利用socket编程,在客户端与服务器端之间建立TCP连接,POP3默认端口号为110;

    第二步:通过pop3定义的各种命令,用户可以操作自己的邮箱。

    注:

    POP3协议中有三种状态,认正状态,处理状态,和更新状态。 命令的执行可以改变协议的状态,而对于具体的某命令,它只能在具体的某状态下使用,这些请参看表1和RFC193。

    客户机与服务器刚与服务器建立连接时,它的状态为认证状态;一旦客户机提供了自己身份并被成功地确认,即由认可状态转入处理状态; 在完成相应的操作后客户机发出QUIT命令(具体说明见后续内容),则进入更新状态,更新之后又重返认可状态;当然在认可状态下执行QUIT命令,可释放连接。状态间的转移如图 1所示。

    ---建立连接---|认可|--认证成功--|处理|--执行QUIT--|更新|        

                |_______ -QUIT结束_________________|

     

     

    常用命令:

    命令

    参数

    使用在何种状态中

    描述

    USER

    Username

    认证

    此命令与下面的pass命令若成功,将导致状态转换

    PASS

    Password

    认证

    此命令若成功,状态转化为更新

    APOP

    Name,Digest

    认证

    Digest是MD5消息摘要

    STAT

    None

    处理

    请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数

    UIDL

    [Msg#](邮件号,下同)

    处理

    返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的

    LIST

    [Msg#]

    处理

    返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的

    RETR

    [Msg#]

    处理

    返回由参数标识的邮件的全部文本

    DELE

    [Msg#]

    处理

    服务器将由参数标识的邮件标记为删除,由QUIT命令执行

    TOP

    [Msg#]

    处理

    服务器将返回由参数标识的邮件的邮件头+前n行内容,n必须是正整数

    NOOP

    None

    处理

    服务器返回一个肯定的响应,用于测试连接是否成功

    QUIT

    None

    处理、认证

    1)        如果服务器处于“处理”状态,么将进入“更新”状态以删除任何标记为删除的邮件,并重返“认证”状态。

    2)        如果服务器处于“认证”状态,则结束会话,退出连接

     

    /**
     * @author hewenwu
     * 这个程序实现了基于POP3协议的邮件接收功能
     * */
    package mail;

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.StringTokenizer;

    public class POP3Client {

        private Socket socket = null;
     
        private boolean debug=true;
     
        public static void main(String[] args) throws UnknownHostException, IOException {
      
            String server="pop3.163.com";//POP3服务器地址
      
            String user="**********";//用户名,填写自己的邮箱用户名
      
            String password="*********";//密码,填写自己的密码
     
            POP3Client pop3Client=new POP3Client(server,110);
     
        pop3Client.recieveMail(user,password);
     }
     
        /*构造函数*/
        public POP3Client(String server,int port) throws UnknownHostException, IOException{
            try{
       
                socket=new Socket(server,port);//在新建socket的时候就已经与服务器建立了连接

            }catch(Exception e){
       
                e.printStackTrace();
     
            }finally{
     
                System.out.println("建立连接!");
            }
        }
     
        
        //接收邮件程序
        public boolean recieveMail(String user,String password){
                
            try {
                    BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
           
                    BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
          
                    user(user,in,out);//输入用户名
           
                    System.out.println("user 命令执行完毕!");
                    
                    pass(password,in,out);//输入密码
          
                    System.out.println("pass 命令执行完毕!");
          
                    stat(in,out);
          
                    System.out.println("stat 命令执行完毕!");
                    
                    list(in,out);
                      
                    System.out.println("list 命令执行完毕!");
                    
                    retr(2,in,out);
                    
                    System.out.println("retr 命令执行完毕!");
          
                    quit(in,out);
                    
                    System.out.println("quit 命令执行完毕!");
         
                }catch(Exception e){
          
                    e.printStackTrace();
          
                    return false;
                }
                return true;
            }
        
        //得到服务器返回的一行命令
        public String getReturn(BufferedReader in){
        
            String line="";
      
            try{
                line=in.readLine();
       
                if(debug){
       
                    System.out.println("服务器返回状态:"+line);
                }
            }catch(Exception e){
     
                e.printStackTrace();
            }
            return line;
        }
     
        //从返回的命令中得到第一个字段,也就是服务器的返回状态码(+OK或者-ERR)
        public String getResult(String line){

            StringTokenizer st=new StringTokenizer(line," ");

            return st.nextToken();
        }
     
        //发送命令
        private String sendServer(String str,BufferedReader in,BufferedWriter out) throws IOException{
            
            out.write(str);//发送命令
     
            out.newLine();//发送空行
     
            out.flush();//清空缓冲区
      
            if(debug){
      
                System.out.println("已发送命令:"+str);
             }
             return getReturn(in);
         }
     
        //user命令
        
        public void user(String user,BufferedReader in,BufferedWriter out) throws IOException{

            String result = null;
     
            result=getResult(getReturn(in));//先检测连接服务器是否已经成功
     
            if(!"+OK".equals(result)){
       
                throw new IOException("连接服务器失败!");
            }
     
            result=getResult(sendServer("user "+user,in,out));//发送user命令

            if(!"+OK".equals(result)){
      
                throw new IOException("用户名错误!");
            }
        }
     
        //pass命令
        public void pass(String password,BufferedReader in,BufferedWriter out) throws IOException{
     
            String result = null;
     
            result = getResult(sendServer("pass "+password,in,out)); 
     
            if(!"+OK".equals(result)){

                throw new IOException("密码错误!");
            }
        }

        
        //stat命令

        public int stat(BufferedReader in,BufferedWriter out) throws IOException{
     
            String result = null;
     
            String line = null;
      
            int mailNum = 0;
     
            line=sendServer("stat",in,out); 
     
            StringTokenizer st=new StringTokenizer(line," ");
      
            result=st.nextToken();
      
            if(st.hasMoreTokens())
     
                mailNum=Integer.parseInt(st.nextToken());
     
            else{
                
                mailNum=0;
                
            }
            
            if(!"+OK".equals(result)){
     
                throw new IOException("查看邮箱状态出错!");
            }
     
            System.out.println("共有邮件"+mailNum+"封");
            return mailNum;
     }
        
            //无参数list命令
            public void list(BufferedReader in,BufferedWriter out) throws IOException{
         
                String message = "";
         
                String line = null;
         
                line=sendServer("list",in,out); 
         
                while(!".".equalsIgnoreCase(line)){
           
                    message=message+line+"\n";    
                
                    line=in.readLine().toString();
                    }
                
                    System.out.println(message);
         }
            
              //带参数list命令
                    public void list_one(int mailNumber ,BufferedReader in,BufferedWriter out) throws IOException{

                        String result = null;
                         
                        result = getResult(sendServer("list "+mailNumber,in,out)); 
                 
                        if(!"+OK".equals(result)){

                            throw new IOException("list错误!");
                        }
                 }
     
     //得到邮件详细信息
     
        public String getMessagedetail(BufferedReader in) throws UnsupportedEncodingException{
     
            String message = "";
      
            String line = null;
     
            try{
                line=in.readLine().toString();
      
                while(!".".equalsIgnoreCase(line)){
       
                    message=message+line+"\n";
       
                    line=in.readLine().toString();
                }
            }catch(Exception e){
      
                e.printStackTrace();
            }
        
                return message;
        }
     
     //retr命令
        public void retr(int mailNum,BufferedReader in,BufferedWriter out) throws IOException, InterruptedException{
      
                String result = null;
       
                result=getResult(sendServer("retr "+mailNum,in,out));
      
                if(!"+OK".equals(result)){
      
                    throw new IOException("接收邮件出错!");
                }
                
                System.out.println("第"+mailNum+"封");
                System.out.println(getMessagedetail(in));
                Thread.sleep(3000);
        }
     
        //退出
        public void quit(BufferedReader in,BufferedWriter out) throws IOException{
     
            String result;
     
            result=getResult(sendServer("QUIT",in,out));
     
            if(!"+OK".equals(result)){
      
                throw new IOException("未能正确退出");
            }
        }
     
    }

     

    总结:

        这个项目其实非常简单,关键要理解两个方面,一是怎么利用socket编程连接到服务器,二是POP3协议命令的格式和返回值的格式。理解了这两个方面,就好做了。首先建立连接,然后通过socket对象获取输入输出流对象,在输入输出流对象上发送命令和接受返回值,接收到返回值之后自己本地处理这些返回值就行啦。

    说到输入输出流,java的输入输出流真的比较多,有点不好记,但是每个输出流的原理是一样,而且有封装的特性。接下来一定要狠狠的把它搞懂了!

    展开全文
  • java实现收取Pop3邮件

    千次阅读 2006-05-07 22:42:00
    以前玩Net的时候自己花了差不多一个暑假的时间来实现一个收取Pop3邮件的组件,所以记忆尤为深刻~呵呵今天无意看见Apache下的一个子项目Commons,其用途是专门做一些常用的开发组件包比如DBPool什么的详细信息可以看...

    以前玩Net的时候自己花了差不多一个暑假的时间来实现一个收取Pop3邮件的组件
    ,所以记忆尤为深刻~呵呵
    今天无意看见Apache下的一个子项目Commons,其用途是专门做一些常用的开发组件包
    比如DBPool什么的
    详细信息可以看这里
    http://jakarta.apache.org/commons/index.html

    其中有个Net包,里面包含来支持多达如下几种协议的组件:
    Supported protocols are:

    • FTP
    • NNTP
    • SMTP
    • POP3
    • Telnet
    • TFTP
    • Finger
    • Whois
    • rexec/rcmd/rlogin
    • Time (rdate) and Daytime
    • Echo
    • Discard
    • NTP/SNTP

    呵呵!真强~~
    其中就包含Pop3邮件收取协议
    于是开工哦!~

    首先先下一个这个包回来附加到Eclipse项目中
    下包可以在这里
    http://mirror.vmmatrix.net/apache/jakarta/commons/net/binaries/commons-net-1.4.1.zip


    然后新建一个Demo.java类,敲下如下代码:就可以收信了~简单,当然你还要按照你的地区再编一次码,否则中文显示为

    package Test;
    import java.io.Reader;
    import java.io.BufferedReader;

    import org.apache.commons.net.pop3.POP3Client;
    import org.apache.commons.net.pop3.POP3MessageInfo;

    public class Demo {

       
    public static void main(String[] args) {
            POP3Client pop3
    = new POP3Client();
           
    try {
                pop3.setDefaultPort(
    110);

                pop3.connect(
    "pop.qq.com");
               
    // 我测试的是QQ邮件~
               
    // 输入你的QQ号作为油箱名称 QQ密码作为邮箱密码
                if (pop3.login("油箱名称", "邮箱密码")) {

                    POP3MessageInfo[] p3m
    = pop3.listMessages();

                    System.out.println(
    "您一共有" + p3m.length + "封信件");
                   
    for (POP3MessageInfo obj : p3m) {
                       
    int id = obj.number;// 获得信件在服务器端的唯一编码

                        Reader red
    = pop3.retrieveMessage(id);
                        BufferedReader br
    = new BufferedReader(red);
                       
    while (br.readLine() != null) {
                            System.out.println(br.readLine());
                        }
                    }
                }

                pop3.logout();
                pop3.disconnect();
            }
    catch (Exception e) {
               
    // TODO Auto-generated catch block
                System.out.println("失败");
                e.printStackTrace();
            }

        }
    }

    展开全文
  • Java Mail 发送邮件

    2011-04-07 03:28:04
    MAIL. JAVA POP3 SMTP imap 发送邮件
  • 使用Socket结合SMTP/POP3邮件协议发送和接收邮件
  • java实现发送邮件功能

    万次阅读 多人点赞 2017-07-04 13:55:12
    java实现发送邮件功能电子邮件开发在后台中是普遍存在的现象和功能,比如用户注册,系统自动发送一封电子邮件到用户邮箱;再比如密码找回,系统会自动把密码发送到用户邮箱;……等等,所以作为一名java程序员,还是...

    ##java实现发送邮件功能

    ####电子邮件开发在后台中是普遍存在的现象和功能,比如用户注册,系统自动发送一封电子邮件到用户邮箱;再比如密码找回,系统会自动把密码发送到用户邮箱;…等等,所以作为一名java程序员,还是有必要学会这项技能的。

    ####我是一名安卓开发人员,我们都知道在客户端和后台交互数据的时候用到了Http协议,那么相应的,邮箱传输也有自己的一套协议,如SMTP,POP3,IMAP。在原生的java JDK中官方为我们封装了Http协议,叫URLConnection,自然的官方也封装了邮件的专属协议,只不过,这个在原生的java JDK中我们找不到,因为它需要我们另外下载。

    ####我们到oracle官网去下载相应的jar包,地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html#javamail-1.4.5-oth-JPR

    ####目前JavaMail的最新版本是1.1.7,我们下载下来如下:

    在这里插入图片描述

    ####mail.jar就是我们需要的,另外还有文档和官方demo,这里我们就不做过多了解,直接开始本demo。

    ####这里我直接在现有项目中使用JUnit Test测试,大家可以新建普通java项目练习。

    import java.util.Date;
    import java.util.Properties;
    import javax.mail.Message.RecipientType;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import org.junit.Test;
    
    public class EmailTest {
    
    	public static final String SMTPSERVER = "smtp.163.com";
    	public static final String SMTPPORT = "465";
    	public static final String ACCOUT = "******@163.com";
    	public static final String PWD = "*******";
    
    	@Test
    	public void testSendEmail() throws Exception {
    		
    		// 创建邮件配置
    		Properties props = new Properties();
    		props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
    		props.setProperty("mail.smtp.host", SMTPSERVER); // 发件人的邮箱的 SMTP 服务器地址
    		props.setProperty("mail.smtp.port", SMTPPORT); 
    		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    		props.setProperty("mail.smtp.auth", "true"); // 需要请求认证
    		props.setProperty("mail.smtp.ssl.enable", "true");// 开启ssl
    		
    
    		// 根据邮件配置创建会话,注意session别导错包
    		Session session = Session.getDefaultInstance(props);
    		// 开启debug模式,可以看到更多详细的输入日志
    		session.setDebug(true);
    		//创建邮件
    		MimeMessage message = createEmail(session);
    		//获取传输通道
    		Transport transport = session.getTransport();
    		transport.connect(SMTPSERVER,ACCOUT, PWD);
    		//连接,并发送邮件
    		transport.sendMessage(message, message.getAllRecipients());
    		transport.close();
    		
    	}
    
    	
    	public MimeMessage createEmail(Session session) throws Exception {
    		// 根据会话创建邮件
    		MimeMessage msg = new MimeMessage(session);
    		// address邮件地址, personal邮件昵称, charset编码方式
    		InternetAddress fromAddress = new InternetAddress(ACCOUT,
    				"kimi", "utf-8");
    		// 设置发送邮件方
    		msg.setFrom(fromAddress);
    		InternetAddress receiveAddress = new InternetAddress(
    				"********@qq.com", "test", "utf-8");
    		// 设置邮件接收方
    		msg.setRecipient(RecipientType.TO, receiveAddress);
    		// 设置邮件标题
    		msg.setSubject("测试标题", "utf-8");
    		msg.setText("我是个程序员,一天我坐在路边一边喝水一边苦苦检查程序。 这时一个乞丐在我边上坐下了,开始要饭,我觉得可怜,就给了他1块钱。 然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他缓缓地指着我的屏幕说,这里少了个分号");
    		// 设置显示的发件时间
    		msg.setSentDate(new Date());
    		// 保存设置
    		msg.saveChanges();
    		return msg;
    	}
    }
    

    代码量并不是很多,然后JUnit Test Run:

    在这里插入图片描述

    邮件确实收到了,当然这里面的吭还是有的,这里根据我遇到的错误,简单说下:

    错误如: DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2

    ####登录失败,这个原因很多。首先我们要保证发送方的邮件,POP3/SMTP服务和IMAP/SMTP服务一定要开启,否则发送失败,拿网易邮箱来说,在如下地方打开此服务:

    在这里插入图片描述

    ####如果以上确认打开了,接下来我们就要确认密码是否正确,因为我的163邮箱开启了客户端授权密码,所以这里一定要注意,这里必须填写客户端授权密码才可以,否则也会出现如上错误。

    ####我碰到的问题就上面的一个,如果有问题或者意见的朋友,欢迎大家随时交流。

    展开全文
  • Telnet通过Smtp和Pop3进行邮件操作

    千次阅读 2017-04-30 17:52:51
    Telnet通过Smtp和Pop3进行邮件操作
  • SipmleEmailClient My homework,a java email client use smtp and pop3 without java Mail, 一个使用SMTP和POP3的简易邮件客户端 Support send email to more than one person 支持发送多人邮件
  • NULL 博文链接:https://zhaoshijie.iteye.com/blog/804788
  • 基于JavaMail的Java邮件发送:简单邮件发送

    万次阅读 多人点赞 2016-06-14 21:56:35
    电子邮件的应用非常广泛,例如在某网站注册了一个...但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发...
  • Qt pop3接收邮件并下载附件程序

    千次阅读 2019-04-30 16:13:13
    功能简介:帮朋友做的自动登陆邮箱接收邮件,并把邮件保存到数据库,附件下载到工程目录。 环境:qtcreator5.4,... 源码:Qt pop3接收邮件并下载附件程序 主要代码 创建数据库并初始化显示 ui->setupUi...
  • 利用java实现发送邮件

    万次阅读 多人点赞 2017-11-14 15:01:31
    很显然这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。电子邮件协议 电子邮件在网络中传输和网页...
  • hotmail pop3Keeping track of multiple email accounts can be difficult, but it doesn’t have to be. If you’re a Hotmail user, you might want to integrate all of your POP3 accounts into a single ...
  • Zend/Mail.php zend发送带附件邮件pop3 接受邮件示例整理 文件:590m.com/f/25127180-494085136-19d36b(访问密码:551685) 【核心代码】 发送邮件: <?php require_once "Zend/Mail.php"; //加载Zend_Mail...
  • 本文实例讲解了java发邮件的详细过程,供大家参考,具体内容如下1、邮件协议发邮件的:SMTP (Simple Mail Transport Protocal)收邮件的协议:pop3 (Post Office Protocal 3)IMAP 新协议 发邮件也可以收邮件。...
  • 利用springframework+javax.mail发邮件(普通邮件、带附件邮件、HTML格式邮件) 一、引入相关的库 <!-- spring核心库 --> <dependency> <groupId>org.springframework</groupId> <...
  • 基于POP3JAVA邮件接收程序

    千次阅读 2012-05-03 14:45:58
    发送有接收才显得完整一点。 同样分两部分写: 一:POP3命令介绍(抄的);二:实例。 一:POP3命令介绍 telnet 119.119.119.212 110 ----------------------------- 使用 telnet 命令连接服务器 110 端口  ...
  • Java实现发送邮件

    2018-11-24 23:53:05
    Java实现发送邮件 摘要:在做Java开发、安卓开发、web开发时,经常遇到邮箱绑定、邮箱找回密码等功能,在使用绑定邮箱并依靠邮箱发送验证码时,需要利用Java实现发送邮件的功能。本人自主开发的诸多项目中也均有发送...
  • java 发送邮件

    2018-06-30 11:41:22
    java 发送邮件 简单易使用,邮箱开启 pop3 smtp 服务支持新浪 等主流邮箱
  • 自己用java socket编程,按照smtp协议及pop3协议进行编写的服务器程序,是在Outlook Express上面可以完全运作的两个服务器,里面详细的写出了代码的注释,以及Outlook Express运行发送接收下载删除邮件操作的步骤........
  • JavaMail POP3接收邮件示例

    千次阅读 2011-05-27 22:35:00
    * 使用JavaMail 编写接收邮件示例 */ package com.labci.javamail.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Properties; ...
  • 收发邮件
  • 发邮件的时候 - 向运维: 维护服务器linux - 索要: - smtp服务器地址, smtp.163.com - 发送邮件的端口号: 默认25 - 发件人的账号和密码 邮件发送封装库代码 import java.util.Properties; import javax.mail....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,908
精华内容 4,363
关键字:

javapop3发送邮件

java 订阅