您的位置:首页 > 编程语言 > Java开发

JavaMail接、收邮件

2015-06-29 23:56 441 查看
我总算把这个研究出来啦....

不要觉得 代码有点多哈。

我们先来说发送邮箱吧,首先建立一个属性文件*.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: