zoukankan      html  css  js  c++  java
  • JavaMail接、收邮件

    我总算把这个研究出来啦....

    不要觉得 代码有点多哈。

    我们先来说发送邮箱吧,首先建立一个属性文件*.properties

    sys.properties

    server=smtp.163.com
    ##  [qq server is:smtp.qq.com   OR  163eamil server is:smtp.163.com]
    authUser=**.com
    authPasswd=**
    ## 

    我建立了一个发送邮件的类:

    贴上我的所有源码,毫不保留:

    package international.doc.javamail;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    /**
     * 邮件发送
     * @author xiaohua
     *
     */
    public class SendMailTest {
        
        public static Properties getProp() throws IOException{
            ClassLoader classLoader=Thread.currentThread().getContextClassLoader();
            InputStream inputStr=classLoader.getResourceAsStream("sys.properties");
            Properties pro=new Properties();
            pro.load(inputStr);
            return pro;
        }
        
        private static String from ="1246447850@qq.com";    //发件人
        private static String to="xuxhcn@yahoo.com";    //接收人
        public static void main(String args[]) throws IOException, AddressException, MessagingException{
            Properties props=getProp();    
            props.put("mail.smtp.host", "smtp.qq.com");//qq邮箱发送服务器为:smtp.qq.com,如果是163邮箱发送则修改为:smtp.163.com
            props.put("mail.smtp.auth", "true");
            //获取session会话
            Session session = Session.getDefaultInstance(props,null);
            Message message=new MimeMessage(session);
            message.setFrom(new InternetAddress(from));//发件人
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));//接收人
            message.setSubject("Hello JavaMail");//邮件标题
            message.setText("Welcome to JavaMail");//邮件内容
            session.setDebug(true);//监控邮件发送过程
            message.saveChanges(); //发送邮件
            Transport transport=session.getTransport();
            transport.connect(props.getProperty("server"), props.getProperty("authUser"),props.getProperty("authPasswd"));
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
            
        }
    }

    这样就可以发送邮件了,值得一提的事,如果你使用163邮箱发送,不要使用刚注册的邮箱,这样认证总是过不去,要么链接超时。

    接收邮件:

    package international.doc.javamail;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    import javax.activation.DataHandler;
    import javax.mail.BodyPart;
    import javax.mail.Folder;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Multipart;
    import javax.mail.Session;
    import javax.mail.Store;
    /**
     * 邮件接收
     * @author xiaohua
     *
     */
    public class ReceiveMailTest {
        public static Properties getProp() throws IOException{
            ClassLoader classLoader=Thread.currentThread().getContextClassLoader();
            InputStream inputStr=classLoader.getResourceAsStream("sys.properties");
            Properties pro=new Properties();
            pro.load(inputStr);
            pro.setProperty("pop3", "mail.store.protocol");
            return pro;
        }
        
        public static void main(String args[]) throws IOException, MessagingException, com.sun.xml.internal.messaging.saaj.packaging.mime.MessagingException{
            //Properties props=getProp();
            Properties props = new Properties();
            props.setProperty("mail.store.protocol", "pop3");
            props.setProperty("mail.pop3.host", "pop3.163.com");
            Session session=Session.getInstance(props);
    //        Session session =Session.getDefaultInstance(props,null);
            Store store=session.getStore("pop3");
            session.setDebug(false);
            store.connect("pop3.163.com","**@163.com","**");//store.connect("邮箱服务","用户名163邮箱","163的密码");
            Folder folder=store.getFolder("INBOX");
            // 接收短信,将会未读和已读短信一起阅读
            folder.open(Folder.READ_ONLY);
            Message[] message= folder.getMessages();
            for(int i=0 ;i<message.length;i++){
                //System.out.println("第"+i+"封邮件==发件人:"+message[i].getFrom()[0]+"标题:"+message[i].getSubject());
                //得到类型 message[i].getContentType()
                if((message[i].getContentType()).indexOf("text/html")!=-1){//纯文本
                    System.out.println(message[i].getContent());
                }else if((message[i].getContentType()).indexOf("text/plain")!=-1){//纯文本
                    System.out.println(message[i].getContent());
                }else{
                    Multipart multipart=(Multipart)message[i].getContent();
                    for(int j=0;j<multipart.getCount();j++){
                        BodyPart bodyPart =multipart.getBodyPart(j);
                        if((bodyPart.getContentType()).indexOf("text/")!=-1){//纯文本数据
                            System.out.println(bodyPart.getContent());
                        }else if((bodyPart.getContentType()).indexOf("multipart/mixed")!=-1){//
                            Multipart mime=(Multipart)bodyPart.getContent();
                            System.out.println(mime);
                        }else{
                            DataHandler dataHandler=bodyPart.getDataHandler();//图片、声音、二进制
                            InputStream inputStream=dataHandler.getInputStream();
                            System.out.println(inputStream);
                        }
                    }
                }
            }
            folder.close(false);
            store.close();
    //        int n= Flags.Flag.RECENT;
    //        folder.open(n);
        }
        
    
    }

    虽然代码的注释很少,

    我是参照:

    http://blog.csdn.net/chjttony/article/details/6005594

    http://www.360doc.com/content/14/0306/17/16088576_358273704.shtml

    值得推荐与学习。

    目前现状调试只支持163发送给别的邮箱,也支持qq邮箱发送别的邮箱,在切换使用不同邮箱发送时,需要变换host,因为不用的邮箱使用的服务器也是不同的!

    欢迎大家指出我的bug,小弟在此等候。嘎嘎~

    另外附上需要用到的jar包:javamail  啊!不支持本地文件上传?纳尼!好吧,大家冲我要~

    后期找到了我的demo,当时写的有些乱。

    http://pan.baidu.com/s/1jHvgalK

    时间,请带我像一条小溪流般,安静地流淌,汇入爱的海洋。
  • 相关阅读:
    750. Number Of Corner Rectangles
    [Project Euler] 3. Largest Prime factor
    [Project Euler] 2. Even Fibonacci numbers
    Jmeter学习笔记3-参数化
    SQL多表连接查询补充
    Jmeter学习笔记2-原件作用域与执行顺序
    Jmeter学习笔记1-实践介绍
    运用badboy录制jmeter脚本
    【SQL提数】左连接使用
    【功能测试技巧2】dubbo引起的数据精度的思考
  • 原文地址:https://www.cnblogs.com/1246447850qqcom/p/4609196.html
Copyright © 2011-2022 走看看