Spring Integration Mail Google IMAP如何设置检查收件箱的频率 [英] Spring Integration Mail Google IMAP how to set the frequency of checking the inbox

查看:139
本文介绍了Spring Integration Mail Google IMAP如何设置检查收件箱的频率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个有效的spring-mail-integration (Spring boot application),并且可以检查我的Google收件箱.
默认情况下,我注意到它每2分钟检查一次我的收件箱.
我忘记了任何设置检查邮件收件箱时间的代码.
现在,我遇到了一个问题,因为有时(虽然很少)我的应用程序无法从收件箱中读取..
我只是在我的日志attempting to receive mail from folder [INBOX]中得到这个 解决该问题的方法是重新启动tomcat服务器,然后我的应用程序现在可以再次检查我的电子邮件收件箱.

I have a working spring-mail-integration (Spring boot application) and can checks my google inbox.
I noticed by default that it is checking my inbox every 2 minutes.
I cannot remember any code that sets the time it checks my mail inbox.
Now, I am having an issue since there are times (rarely though) that my application cannot read from inbox..
I am just getting this in my log attempting to receive mail from folder [INBOX] What I do to fix the issue is I restart my tomcat server, then my app can now check my email inbox again.

日志(带有日期和时间):

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)分钟或更短的时间是一个坏主意吗?我认为Google可能会禁止ip访问/检查收件箱.

Question:
1. How to change the time it checks the inbox?
2. Is two (2) minutes or lower a bad idea? I am thinking that google might ban the ip from accessing/checking the inbox.

依赖性:

<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();
    }

    ...

}

如果您可以提供有关说明的链接,那也很好.

It would also be great if you could give a link regarding the explanations.

谢谢!

推荐答案

设置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连接.

It is not currently exposed by the Java DSL so you will have to wire up an ImapMailReceiver as a 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();
}

这篇关于Spring Integration Mail Google IMAP如何设置检查收件箱的频率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆