java - Java 电子邮件侦听器
问题描述
我遇到了 IdleManager 类和 watch 方法,它使 imap 文件夹保持打开状态,理论上是在监视新消息,但是当新电子邮件到达时,我如何让它输出或通知呢?
编码:
public static void main(String[] args) throws MessagingException, IOException {
IMAPFolder folder = null;
Store store = null;
String subject = null;
Flag flag = null;
try
{
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.usesocketchannels", "true");
Session session = Session.getDefaultInstance(props, null);
ExecutorService es = Executors.newCachedThreadPool();
final IdleManager idleManager = new IdleManager(session, es);
store = session.getStore("imaps");
store.connect("<mail>.com","<username>", "<password>");
folder = (IMAPFolder) store.getFolder("INBOX");
if(!folder.isOpen())
folder.open(Folder.READ_ONLY);
folder.addMessageCountListener(new MessageCountAdapter() {
public void messagesAdded(MessageCountEvent ev) {
Folder folder = (Folder)ev.getSource();
Message[] msgs = ev.getMessages();
System.out.println("Folder: " + folder +
" got " + msgs.length + " new messages");
try {
// process new messages
idleManager.watch(folder); // keep watching for new messages
} catch (MessagingException mex) {
// handle exception related to the Folder
}
}
});
idleManager.watch(folder);
Message[] messages = folder.getMessages();
System.out.println("No of Messages : " + folder.getMessageCount());
System.out.println("No of Unread Messages : " + folder.getUnreadMessageCount());
System.out.println(messages.length);
for (int i=0; i < messages.length;i++)
{
System.out.println("*****************************************************************************");
System.out.println("MESSAGE " + (i + 1) + ":");
Message msg = messages[i];
subject = msg.getSubject();
System.out.println("Subject: " + subject);
System.out.println("From: " + msg.getFrom()[0]);
System.out.println("To: "+msg.getAllRecipients()[0]);
}
}
finally
{
if (folder != null && folder.isOpen()) { folder.close(true); }
if (store != null) { store.close(); }
}
}
此代码仅获取和输出文件夹中已有的消息,但不输出新的传入电子邮件。
如何让它输出或通知新收到的电子邮件?
解决方案
推荐阅读
- sockets - 为UDP保持套接字打开?
- azure - 允许来自 Azure K8S pod 的 AWS RDS 连接
- javascript - 传递 PHP 下一页变量
- expectations - Serverspec 支持期望还是我必须使用 should?
- artifactory - 上传到工件后,是否可以向多个文件添加属性?
- swift - 相同的协议对象,但不同的功能
- c# - 如何让 NLog 输出出现在 Azure 函数的流式日志中?
- swift - 基于自动换行的 Swift 拆分子字符串
- java - 使用 filter() 逐个过滤掉元素
- java - Java 可以通过哪些方式在没有 `throw` 语句的情况下抛出异常?