java mail 学习笔记3——接收电子邮件
2016-11-30 14:59
369 查看
使用Java mail来收取邮件,较之发送邮件稍显复杂。如下图:
具体步骤如下:
1.从session对象中获取store对象。
store是一个抽象类,它模拟一个消息存储和访问协议,用于存储和检索消息。子类提供实际的实现。
[java] view
plain copy
Properties props=new Properties();
props.setProperty("mail.transport.protocol", "pop3");
props.setProperty("mail.host", "pop3.sina.com");
Session session=Session.getInstance(props, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("******@sina.com","******");
}
}
);
Store store=session.getStore("pop3");
store.connect("pop3.sina.com", "******@sina.com", "******");
2.调用store的getFolder方法,获取邮箱中某个邮件夹的Folder对象。
当获得此文件夹时,它是关闭的,可以对关闭的文件夹进行一些操作,如删除或重命名,但无法获得关闭文件夹中的消息。
[java] view
plain copy
Folder folder=store.getFolder("INBOX");
if(folder==null){
System.out.println("No Inbox");
System.exit(1);
}
folder.open(Folder.READ_ONLY);
注意:Folder类中定义了两个常量READ_ONLY,READ_WRITE来表示Folder的操作权限。
3.获取邮件:
Message类提供了很多操作各个消息的方法。它又获得消息各个首部字段、获得消息内容等的方法。现在,只要进行最简单的操作,即调用writeTo()在System.out显示每个消息。
操作完这些消息后,记得关闭文件夹、关闭消息存储器。
完整的代码如下:
[java] view
plain copy
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
public class ReciveMail {
public static void main(String[] args) throws Exception{
Properties props=new Properties();
props.setProperty("mail.transport.protocol", "pop3");
props.setProperty("mail.host", "pop3.sina.com");
Session session=Session.getInstance(props, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("******@sina.com","******");
}
}
);
Store store=session.getStore("pop3");
store.connect("pop3.sina.com", "******@sina.com", "******");
Folder folder=store.getFolder("INBOX");
if(folder==null){
System.out.println("No Inbox");
System.exit(1);
}
folder.open(Folder.READ_ONLY);
Message[] ms=folder.getMessages();
for(int i=0;i<ms.length;i++){
System.out.println("----------Message "+(i+1)+" begin-----------------");
System.out.println("来自:"+ms[i].getFrom());
ms[i].writeTo(System.out);
System.out.println("----------Message "+(i+1)+"end -----------------");
}
folder.close(false);//关闭连接,但不删除服务器上的消息。
store.close();
}
}
如果想将上面程序移植到IMAP,唯一要做的就是将mail.transport.protocol的值换成imap。
具体步骤如下:
1.从session对象中获取store对象。
store是一个抽象类,它模拟一个消息存储和访问协议,用于存储和检索消息。子类提供实际的实现。
[java] view
plain copy
Properties props=new Properties();
props.setProperty("mail.transport.protocol", "pop3");
props.setProperty("mail.host", "pop3.sina.com");
Session session=Session.getInstance(props, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("******@sina.com","******");
}
}
);
Store store=session.getStore("pop3");
store.connect("pop3.sina.com", "******@sina.com", "******");
2.调用store的getFolder方法,获取邮箱中某个邮件夹的Folder对象。
当获得此文件夹时,它是关闭的,可以对关闭的文件夹进行一些操作,如删除或重命名,但无法获得关闭文件夹中的消息。
[java] view
plain copy
Folder folder=store.getFolder("INBOX");
if(folder==null){
System.out.println("No Inbox");
System.exit(1);
}
folder.open(Folder.READ_ONLY);
注意:Folder类中定义了两个常量READ_ONLY,READ_WRITE来表示Folder的操作权限。
3.获取邮件:
Message类提供了很多操作各个消息的方法。它又获得消息各个首部字段、获得消息内容等的方法。现在,只要进行最简单的操作,即调用writeTo()在System.out显示每个消息。
操作完这些消息后,记得关闭文件夹、关闭消息存储器。
完整的代码如下:
[java] view
plain copy
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
public class ReciveMail {
public static void main(String[] args) throws Exception{
Properties props=new Properties();
props.setProperty("mail.transport.protocol", "pop3");
props.setProperty("mail.host", "pop3.sina.com");
Session session=Session.getInstance(props, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("******@sina.com","******");
}
}
);
Store store=session.getStore("pop3");
store.connect("pop3.sina.com", "******@sina.com", "******");
Folder folder=store.getFolder("INBOX");
if(folder==null){
System.out.println("No Inbox");
System.exit(1);
}
folder.open(Folder.READ_ONLY);
Message[] ms=folder.getMessages();
for(int i=0;i<ms.length;i++){
System.out.println("----------Message "+(i+1)+" begin-----------------");
System.out.println("来自:"+ms[i].getFrom());
ms[i].writeTo(System.out);
System.out.println("----------Message "+(i+1)+"end -----------------");
}
folder.close(false);//关闭连接,但不删除服务器上的消息。
store.close();
}
}
如果想将上面程序移植到IMAP,唯一要做的就是将mail.transport.protocol的值换成imap。
相关文章推荐
- Java Mail 学习笔记2——发送电子邮件
- java学习笔记—第三方操作数据库包专门接收DataSource-dbutils (30)
- 【Java学习笔记】接收命令行参数输出指定个数的斐波那契数列
- 学习笔记——mail发送javax.mail.AuthenticationFailedException: failed to connect at javax.mail.Service.connect(Service.java:322) at javax.mail.Service.connect(Service.java:172) at javax.mail.Service.connect
- RabbitMQ学习笔记二:rabbitmq发送接收消息Helloworld(Java版)
- java微信接收并回复文本信息(java微信开发学习笔记2)
- Flask学习总结笔记(8) -- 利用Flask-mail实现电子邮件发送功能
- mail.java--学习笔记
- java mail 学习笔记3——接收电子邮件
- 我的Thinking in Java学习笔记(1)
- Java中文处理学习笔记——Hello Unicode
- 我的Thinking in Java学习笔记(七) (zt)
- Java中文处理学习笔记
- 我的Thinking in Java学习笔记(九)
- 我的Thinking in Java学习笔记(六)
- JAVAGUIDE(学习笔记1)
- 我的Thinking in Java学习笔记(四) (zt)
- Thinking in Java学习笔记(三)(zt)
- java对象序列化学习笔记(z)
- 我的Thinking in Java学习笔记(三)