我总算把这个研究出来啦....
不要觉得 代码有点多哈。
我们先来说发送邮箱吧,首先建立一个属性文件*.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