spring - Spring Integration Mail Google IMAP 如何设置收件箱的检查频率
问题描述
我有一个有效的 spring-mail-integration(Spring boot application)
并且可以检查我的谷歌收件箱。
我注意到默认情况下它每 2 分钟检查一次我的收件箱。
我不记得有任何代码设置它检查我的邮件收件箱的时间。
现在,我遇到了一个问题,因为有时(尽管很少)我的应用程序无法从收件箱中读取。
我只是在我的日志中得到这个我attempting to receive mail from folder [INBOX]
要解决的问题是我重新启动我的 tomcat 服务器,然后我的应用程序可以现在再次检查我的电子邮件收件箱。
日志(带日期和时间):
2018-10-16 12:37:13 - attempting to receive mail from folder [INBOX]
2018-10-16 12:39:18 - attempting to receive mail from folder [INBOX]
2018-10-16 12:41:22 - attempting to receive mail from folder [INBOX]
2018-10-16 12:43:26 - attempting to receive mail from folder [INBOX]
2018-10-16 12:45:30 - attempting to receive mail from folder [INBOX]
2018-10-16 12:47:35 - attempting to receive mail from folder [INBOX]
2018-10-16 12:49:39 - attempting to receive mail from folder [INBOX]
2018-10-16 12:51:43 - attempting to receive mail from folder [INBOX]
2018-10-16 12:53:47 - attempting to receive mail from folder [INBOX]
2018-10-16 12:55:52 - attempting to receive mail from folder [INBOX]
2018-10-16 12:57:56 - attempting to receive mail from folder [INBOX]
2018-10-16 13:00:00 - attempting to receive mail from folder [INBOX]
2018-10-16 13:02:04 - attempting to receive mail from folder [INBOX]
2018-10-16 13:04:09 - attempting to receive mail from folder [INBOX]
2018-10-16 13:06:13 - attempting to receive mail from folder [INBOX]
2018-10-16 13:08:17 - attempting to receive mail from folder [INBOX]
2018-10-16 13:10:21 - attempting to receive mail from folder [INBOX]
2018-10-16 13:12:25 - attempting to receive mail from folder [INBOX]
2018-10-16 13:14:29 - attempting to receive mail from folder [INBOX]
2018-10-16 13:16:33 - attempting to receive mail from folder [INBOX]
2018-10-16 13:18:37 - attempting to receive mail from folder [INBOX]
2018-10-16 13:20:41 - attempting to receive mail from folder [INBOX]
2018-10-16 13:22:44 - attempting to receive mail from folder [INBOX]
2018-10-16 13:24:48 - attempting to receive mail from folder [INBOX]
2018-10-16 13:26:53 - attempting to receive mail from folder [INBOX]
2018-10-16 13:28:57 - attempting to receive mail from folder [INBOX]
2018-10-16 13:31:02 - attempting to receive mail from folder [INBOX]
2018-10-16 13:33:06 - attempting to receive mail from folder [INBOX]
2018-10-16 13:35:10 - attempting to receive mail from folder [INBOX]
2018-10-16 13:37:14 - attempting to receive mail from folder [INBOX]
2018-10-16 13:39:17 - attempting to receive mail from folder [INBOX]
2018-10-16 13:41:21 - attempting to receive mail from folder [INBOX]
2018-10-16 13:43:25 - attempting to receive mail from folder [INBOX]
2018-10-16 13:45:30 - attempting to receive mail from folder [INBOX]
2018-10-16 13:47:33 - attempting to receive mail from folder [INBOX]
2018-10-16 13:49:38 - attempting to receive mail from folder [INBOX]
问题:
1. 如何更改查看收件箱的时间?
2. 两 (2) 分钟或更短的时间是个坏主意吗?我在想谷歌可能会禁止 ip 访问/检查收件箱。
依赖:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mail</artifactId>
</dependency>
邮件配置:
@Configuration
public class MailConfig {
...
@Bean
@SuppressWarnings("Duplicates")
@Qualifier(value = "javaMailSender")
public JavaMailSender getJavaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(m_mailHost);
mailSender.setPort(m_mailPort);
mailSender.setUsername(m_mailUserEmail);
mailSender.setPassword(m_mailPassword);
Properties props = mailSender.getJavaMailProperties();
props.put(PROPERTY_MAIL_TRANSPORT_PROTOCOL, m_mailProtocol);
props.put(PROPERTY_MAIL_SMTP_AUTHENTICATION, m_mailSmtpAuth);
props.put(PROPERTY_MAIL_SMTP_START_TLS_ENABLED, m_mailSmtpStartTlsEnabled);
props.put(PROPERTY_MAIL_DEBUG, m_mailDebug);
return mailSender;
}
@Bean
@Qualifier(value = "imapMailFlow")
public IntegrationFlow imapMailFlow() throws UnsupportedEncodingException {
String user = URLEncoder.encode(mailUserEmail, ConstantUtil.CHARACTER_ENCODING);
return IntegrationFlows
.from(Mail.imapIdleAdapter("imaps://" + user + ":" + mailPassword + "@imap.gmail.com:993/inbox")
.javaMailProperties(p -> p.put("mail.debug", "false")
.put("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
.put("mail.imap.socketFactory.fallback", "false").put("mail.store.protocol", "imaps"))
.shouldMarkMessagesAsRead(true).shouldDeleteMessages(false))
.channel("receiveChannel").get();
}
...
}
如果您可以提供有关解释的链接,那也很棒。
谢谢!
解决方案
设置cancelIdleInterval
.
/**
* IDLE commands will be terminated after this interval; useful in cases where a connection
* might be silently dropped. A new IDLE will usually immediately be processed. Specified
* in seconds; default 120 (2 minutes). RFC 2177 recommends an interval no larger than 29 minutes.
* @param cancelIdleInterval the cancelIdleInterval to set
* @since 3.0.5
*/
public void setCancelIdleInterval(long cancelIdleInterval) {
this.cancelIdleInterval = cancelIdleInterval * 1000;
}
Java DSL 目前没有公开它,因此您必须将 ImapMailReceiver 作为 bean 连接起来。
编辑
@Bean
public ImapMailReceiver receiver() {
ImapMailReceiver receiver = new ImapMailReceiver("...some URL...");
receiver.setCancelIdleInterval(300); // seconds
receiver.setJavaMailProperties(javaMailProperties);
return receiver;
}
@Bean
public IntegrationFlow mailFlow() {
return IntegrationFlows.from(Mail.imapIdleAdapter(receiver()))
// ...
.get();
}
推荐阅读
- mysql - 加入两个表而不获取重复行
- python - 为什么使用带有'sendp()'的scapy错误源mac地址
- react-native - 如何为 redux mapStateToProps 创建 BaseComponent 类
- django - 如何从 Python 和 Django 访问和控制文档扫描仪[ADF 正面和背面],如 Kodak 或 Hp
- matlab - 如何从仿射变换计算俯仰、滚动和偏航
- pm2 - 带有多个参数的 PM2 启动脚本(服务)
- javascript - 关于 setInterval() 和动画
- excel - 将公式添加到 VBA 中的单元格时应用程序定义的错误
- python - 在python中将行转换为列
- xquery - 创建 eXist-DB 查询队列