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

时间,请带我像一条小溪流般,安静地流淌,汇入爱的海洋。
原文地址:https://www.cnblogs.com/1246447850qqcom/p/4609196.html