#java #email #pop3
Вопрос:
Я отмечаю сообщение, которое должно быть удалено после обработки :
...
import javax.mail.*;
...
public void delete(Message message) throws MessagingException {
try {
message.setFlag(Flags.Flag.DELETED, true);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
...
Затем я хочу получать сообщения :
...
import com.sun.mail.pop3.POP3Store;
import java.util.Properties;
...
@Value("${mail.host}")
private String host;
@Value("${mail.storeType}")
private String storeType;
@Value("${mail.port}")
private int port;
@Value("${mail.username}")
private String username;
@Value("${mail.password}")
private String password;
@Value("${mail.auth}")
private boolean auth;
@Value("${mail.ssl.trust}")
private String sss_trust;
private POP3Store emailstore = null;
private boolean start = true;
...
public POP3Store getEmailStore() throws Exception {
Properties properties = new Properties();
properties.setProperty("mail.store.protocol", storeType);
properties.setProperty("mail." storeType ".host", host);
properties.setProperty("mail." storeType ".port", String.valueOf(port));
properties.setProperty("mail." storeType ".auth", String.valueOf(auth));
properties.setProperty("mail." storeType ".socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail." storeType ".ssl.trust", sss_trust);
try {
Session emailSession = Session.getDefaultInstance(properties);
POP3Store emailStore = (POP3Store) emailSession.getStore(storeType);
return emailStore;
} catch (NoSuchProviderException e) {
e.printStackTrace();
throw e;
}
}
Folder emailFolder = emailstore.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
Message[] messages = emailFolder.getMessages(); // how to get messages that are not flagged as deleted ?
if (messages != null) {
for (Message message : messages) {
try {
mailService.createTicket(message);
mailService.delete(message);
} catch (Exception ex) {
throw ex;
}
}
}
emailFolder.close(true);
Как я уже говорил, я хочу получать сообщения, которые не помечены как удаленные. Как это сделать ?
Ответ №1:
Основываясь на Message
классе, вы можете сделать что-то вроде этого:
for (Message message : messages) {
if (!message.getFlags().contains(Flags.Flag.DELETED)) { // This will hopefully help
try {
mailService.createTicket(message);
mailService.delete(message);
} catch (Exception ex) {
throw ex;
}
}
}
Комментарии:
1. хорошо, есть также это, чтобы установить, потому что это было ТОЛЬКО для ЧТЕНИЯ :
emailFolder.open(Folder.READ_WRITE);