我正在制作一个使用 Spring Scheduler 定期收集和保存邮件的程序。 下面是调度程序部分的代码。
@Service
@RequiredArgsConstructor
public class Scheduler {
private final MailService mailService;
@Scheduled(cron = "0 0/1 * * * *")
public void getMail() throws Exception {
mailService.getMail("pop.gmail.com","username","password");
}
这是
MailService
里面的一个函数。
public void getMail(String host, String username, String password) throws Exception {
System.out.println("host = " + host);
System.out.println("username = " + username);
System.out.println("password = " + password);
Properties pop3Props = new Properties();
pop3Props.setProperty("mail.store.protocol", "pop3");
pop3Props.setProperty("mail.pop3.host", host);
pop3Props.setProperty("mail.pop3.port", "995");
pop3Props.setProperty("mail.debug", "true");
pop3Props.setProperty("mail.pop3.starttls.enable", "true");
pop3Props.setProperty("mail.pop3.socketFactory.class", SSLSocketFactory.class.getName());
Session session = Session.getDefaultInstance(pop3Props);
Store store = session.getStore("pop3");
store.connect(username, password);
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
javax.mail.Message[] messages = inbox.getMessages();
File directory = new File("mail");
directory.mkdirs();
for (javax.mail.Message message : messages) {
String subject = message.getSubject().replaceAll("/", "");
message.writeTo(new FileOutputStream("mail/" + subject + ".eml"));
}
inbox.close(false);
store.close();
}
如果你把那个函数的内容写在里面,pop3正常工作,但是
javax.mail.AuthenticationFailedException:连接失败
发生在spring Scheduler中。可能是什么原因?
我也问了 chatGPT 并用谷歌搜索,但找不到它。