如何修复 Java 邮件在 while 循环中不显示新邮件
How to fix Java Mail not displaying new emails in while loop
我正在制作一个脚本来使用电子邮件打开和关闭我的灯,除了它不会更新到最新的电子邮件之外,一切正常,我不知道为什么。我在网上找不到任何东西,也没有尝试任何东西,因为我完全迷路了。顺便说一句,有关更多信息,脚本第一次运行时会运行最新的电子邮件,但之后不会再运行
这是我的代码,请帮忙
根据我的理解,while 循环应该工作的方式是获取一个主题,然后检查它是否与我要求它查找的内容匹配,然后天气是否匹配它会到达顶部并检查最多最近的主题再次检查它是否是我正在寻找的东西然后一次又一次地做它
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
public class GetEmails {
public static void on(){
SSH on = new SSH();
on.command = "python3 on.py";
on.run();
}
public static void off(){
SSH off = new SSH();
off.command = "python3 off.py";
off.run();
}
public static void check(String host, String storeType, String user,
String password)
{
try {
//create properties field
Properties properties = new Properties();
properties.put("mail.pop3.host", host);
properties.put("mail.pop3.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);
//create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
store.connect(host, user, password);
//create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
// retrieve the messages from the folder in an array
Message[] messages = emailFolder.getMessages();
boolean power = true;
while(true){
int i = messages.length - 1;
Message message = messages[i];
String subject = message.getSubject();
// System.out.println(subject);
if(subject.equals("+myRoom") & power == false){
on();
power = true;
System.out.println("Light on");
}
else if (subject.equals("-myRoom") & power == true){
off();
power = false;
System.out.println("Light Off");
}
else{
continue;
}
}
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "EMAIL@gmail.com";// change accordingly
String password = "PASSWORD";// change accordingly
check(host, mailStoreType, username, password);
}
}
问题是您只在 while 循环之前调用 getMessages() ,然后在 while 循环中一遍又一遍地不断检查同一组下载的消息。
您需要更改 while 循环以下载最新的(一组)消息。
我还要指出,您的代码没有考虑到接收非命令消息的可能性,这些消息可能会将最新的命令消息推送到“不是最新的”槽中(例如,最新的命令消息可能具有索引 messages.length - 2
而非命令消息具有 messages.length - 1
索引)也不考虑由于网络中断或服务器断开连接而断开连接的可能性(由于多种原因,这种情况一直发生) .
我正在制作一个脚本来使用电子邮件打开和关闭我的灯,除了它不会更新到最新的电子邮件之外,一切正常,我不知道为什么。我在网上找不到任何东西,也没有尝试任何东西,因为我完全迷路了。顺便说一句,有关更多信息,脚本第一次运行时会运行最新的电子邮件,但之后不会再运行
这是我的代码,请帮忙
根据我的理解,while 循环应该工作的方式是获取一个主题,然后检查它是否与我要求它查找的内容匹配,然后天气是否匹配它会到达顶部并检查最多最近的主题再次检查它是否是我正在寻找的东西然后一次又一次地做它
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
public class GetEmails {
public static void on(){
SSH on = new SSH();
on.command = "python3 on.py";
on.run();
}
public static void off(){
SSH off = new SSH();
off.command = "python3 off.py";
off.run();
}
public static void check(String host, String storeType, String user,
String password)
{
try {
//create properties field
Properties properties = new Properties();
properties.put("mail.pop3.host", host);
properties.put("mail.pop3.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);
//create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
store.connect(host, user, password);
//create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
// retrieve the messages from the folder in an array
Message[] messages = emailFolder.getMessages();
boolean power = true;
while(true){
int i = messages.length - 1;
Message message = messages[i];
String subject = message.getSubject();
// System.out.println(subject);
if(subject.equals("+myRoom") & power == false){
on();
power = true;
System.out.println("Light on");
}
else if (subject.equals("-myRoom") & power == true){
off();
power = false;
System.out.println("Light Off");
}
else{
continue;
}
}
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "EMAIL@gmail.com";// change accordingly
String password = "PASSWORD";// change accordingly
check(host, mailStoreType, username, password);
}
}
问题是您只在 while 循环之前调用 getMessages() ,然后在 while 循环中一遍又一遍地不断检查同一组下载的消息。
您需要更改 while 循环以下载最新的(一组)消息。
我还要指出,您的代码没有考虑到接收非命令消息的可能性,这些消息可能会将最新的命令消息推送到“不是最新的”槽中(例如,最新的命令消息可能具有索引 messages.length - 2
而非命令消息具有 messages.length - 1
索引)也不考虑由于网络中断或服务器断开连接而断开连接的可能性(由于多种原因,这种情况一直发生) .