A. 用javamail怎样监听新邮件
folder = store.getDefaultFolder();//获取默认文件夹
if (folder == null) throw new Exception("No default folder");
folder = folder.getFolder("INBOX");//链接收件箱
if (folder == null) throw new Exception("No POP3 INBOX");
folder.open(Folder.READ_ONLY);//使用只读方式打开收件箱
Message[] msgs = folder.getMessages();//得到文件夹信息,获取列表
B. 如何使用JavaMail删除QQ邮件服务器上的邮件
JavaMail是提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。可以方便地执行一些常用的邮件传输。
如果需要使用JavaMail编程来实现删除QQ邮件服务器上的邮件,可以参考以下代码,在调用deleteMessages方法时,只需要传入邮件服务器地址、端口、邮箱登录用户名、登录密码以及需要删除的邮件主题五个参数即可:
packagecom.what21.network.mail;
importjava.util.Properties;
importjavax.mail.Flags;
importjavax.mail.Folder;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.NoSuchProviderException;
importjavax.mail.Session;
importjavax.mail.Store;
{
/**
*删除主题中包含subjectToDelete字符串的所有邮件
*
*@param邮箱服务器地址
*@param邮箱服务器端口
*@param登录用户名
*@param登录密码
*@param如果邮件主题包含这个字符串就会对其进行删除操作
*/
publicvoiddeleteMessages(Stringhost,Stringport,StringuserName,
Stringpassword,StringsubjectToDelete){
Propertiesproperties=newProperties();
//邮箱服务器配置
properties.put("mail.imap.host",host);
properties.put("mail.imap.port",port);
//SSL连接配置
properties.setProperty("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.imap.socketFactory.fallback","false");
properties.setProperty("mail.imap.socketFactory.port",
String.valueOf(port));
Sessionsession=Session.getDefaultInstance(properties);
try{
//连接邮箱服务器
Storestore=session.getStore("imap");
store.connect(userName,password);
//打开收件箱
FolderfolderInbox=store.getFolder("INBOX");
folderInbox.open(Folder.READ_WRITE);
//从服务器获取新邮件
Message[]arrayMessages=folderInbox.getMessages();
for(inti=0;i<arrayMessages.length;i++){
Messagemessage=arrayMessages[i];
Stringsubject=message.getSubject();
if(subject.contains(subjectToDelete)){
//给需要删除的邮件打上标签
message.setFlag(Flags.Flag.DELETED,true);
System.out.println("MarkedDELETEformessage:"+subject);
}
}
//删除指定的邮件
booleanexpunge=true;
folderInbox.close(expunge);
//anotherway:
//folderInbox.expunge();
//folderInbox.close(false);
//断开连接
store.close();
}catch(NoSuchProviderExceptionex){
System.out.println("Noprovider.");
ex.printStackTrace();
}catch(MessagingExceptionex){
System.out.println(".");
ex.printStackTrace();
}
}
/**
*测试-Gmail邮箱
*protocol.
*/
publicstaticvoidmain(String[]args){
Stringhost="imap.gmail.com";
Stringport="993";
StringuserName="your_email";
Stringpassword="your_password";
EmailMessageRemoverremover=newEmailMessageRemover();
StringsubjectToDelete="Newsletter";
remover.deleteMessages(host,port,userName,password,subjectToDelete);
}
}
C. javamail如何收附件
参考代码如下:
import javax.mail.*;
import java.util.*;
import java.io.*;
public class ReceiveMail {
//处理任何一种邮件都需要的方法
private void handle(Message msg) throws Exception {
System.out.println("邮件主题:" + msg.getSubject());
System.out.println("邮件作者:" + msg.getFrom()[0].toString());
System.out.println("发送日期:" + msg.getSentDate());
}
//处理文本邮件
private void handleText(Message msg) throws Exception {
this.handle(msg);
System.out.println("邮件内容:"+msg.getContent());
}
//处理Multipart邮件,包括了保存附件的功能
private static void handleMultipart(Message msg) throws Exception {
String disposition;
BodyPart part;
Multipart mp = (Multipart) msg.getContent();
//Miltipart的数量,用于除了多个part,比如多个附件
int mpCount = mp.getCount();
for (int m = 0; m < mpCount; m++) {
this.handle(msg);
part = mp.getBodyPart(m);
disposition = part.getDisposition();
//判断是否有附件
if (disposition != null && disposition.equals(Part.ATTACHMENT))
{
//这个方法负责保存附件
saveAttach(part);
} else {
//不是附件,就只显示文本内容
System.out.println(part.getContent());
}
}
}
private static void saveAttach(BodyPart part) throws Exception {
//得到未经处理的附件名字
String temp = part.getFileName();
//除去发送邮件时,对中文附件名编码的头和尾,得到正确的附件名
//(请参考发送邮件程序SendMail的附件名编码部分)
String s = temp.substring(8, temp.indexOf("?="));
//文件名经过了base64编码,下面是解码
String fileName = base64Decoder(s);
System.out.println("有附件:" + fileName);
InputStream in = part.getInputStream();
FileOutputStream writer = new FileOutputStream(new File(
"保存附件的本地路径"+ "\\"+fileName));
byte[] content = new byte[255];
int read = 0;
while ((read = in.read(content)) != -1) {
writer.write(content);
}
writer.close();
in.close();
}
//base64解码
private static String base64Decoder(String s) throws Exception {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);
return (new String(b));
}
public static void receive(String receiverMailBoxAddress, String username,String password) {
//本人用的是yahoo邮箱,故接受邮件使用yahoo的pop3邮件服务器
String host = "pop.mail.yahoo.com.cn";
try {
//连接到邮件服务器并获得邮件
Properties prop = new Properties();
prop.put("mail.pop3.host", host);
Session session = Session.getDefaultInstance(prop);
Store store = session.getStore("pop3");
store.connect(host, username, password);
Folder inbox = store.getDefaultFolder().getFolder("INBOX");
//设置inbox对象属性为可读写,这样可以控制在读完邮件后直接删除该附件
inbox.open(Folder.READ_WRITE);
Message[] msg = inbox.getMessages();
FetchProfile profile = new FetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
inbox.fetch(msg, profile);
for (int i = 0; i < msg.length; i++) {
//标记此邮件的flag标志对象的DELETED位为true,可以在读完邮件后直接删除该附件,具体执行时间是在调用
//inbox.close()方法的时候
msg[i].setFlag(Flags.Flag.DELETED, true);
handleMultipart(msg[i]);
System.out.println("****************************");
}
if (inbox != null) {
//参数为true表明阅读完此邮件后将其删除,更多的属性请参考mail.jar的API
inbox.close(true);
}
if (store != null) {
store.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
D. javamail使用IMAP协议接受QQ邮件不成功,大虾们帮忙解决下~
Folder改成IMAPFolder f=(IMAPFolder)store.getFolder("INBOX");试试
E. JavaMail问题,怎样获得发件箱,草稿箱,回收站里面的邮件
获取发件箱、复草稿箱、回收制站的代码很简单:
我们在获取收件箱的代码是:
Folder folder = store.getFolder("INBOX");
但是我们在获取发件箱、与草稿箱时出现异常,这时就与邮件服务器的文件夹有关;
可以这样获取所有的文件夹:
Folder defaultFolder = store.getDefaultFolder();
Folder[] allFolder = defaultFolder.list();
通过调试或者迭代出来文件夹名称再通过找出来的文件夹名称获取发件箱与草稿箱集合:Folder folder = store.getFolder("这里是迭代找出来的文件夹名称");
根据获取的文件夹去得到里面的文件,
F. 使用javamail查询收件箱,如何获得邮件的发送时间呢请详细说明,谢谢
首先必须获取抄链接:
Properties props = new Properties();
Session session = Session.getInstance(props);
Store store = session.getStore(receiptorPro);
store.connect(“接受邮件服务器”, “端口”, “用户名”, “密码”);
打开Folder:
Folder inbox = store.getFolder("INBOX");
Folder有pop3和imap两种:
IMAPFolder folder = (IMAPFolder) inbox;
folder.open(Folder.READ_WRITE);//Folder.READ_WRITE为打开状态
获取邮件:
Message[] messages = folder.getMessages();
for (int i = 0; i < messages.length; i++) {
Date sendDate = messages[i].getSentDate();
//ok 就能取出发送时间
}