Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring集成邮件Google IMAP如何设置检查收件箱的频率_Spring_Spring Boot_Spring Integration_Jakarta Mail - Fatal编程技术网

Spring集成邮件Google IMAP如何设置检查收件箱的频率

Spring集成邮件Google IMAP如何设置检查收件箱的频率,spring,spring-boot,spring-integration,jakarta-mail,Spring,Spring Boot,Spring Integration,Jakarta Mail,我有一个工作的spring mail集成(spring boot应用程序),可以查看我的google收件箱。 我注意到默认情况下,它每2分钟检查一次我的收件箱。 我记不起任何设置它检查我的邮件收件箱时间的代码。 现在,我遇到了一个问题,因为我的应用程序有时(很少)无法从收件箱中读取内容。 我正试图从文件夹[收件箱]接收邮件时,我的日志中出现了这个问题。 我要做的是重新启动我的tomcat服务器,然后我的应用程序现在可以再次检查我的电子邮件收件箱 日志(带日期和时间): 2018-10-16 12

我有一个工作的spring mail集成
(spring boot应用程序)
,可以查看我的google收件箱。
我注意到默认情况下,它每2分钟检查一次我的收件箱。
我记不起任何设置它检查我的邮件收件箱时间的代码。
现在,我遇到了一个问题,因为我的应用程序有时(很少)无法从收件箱中读取内容。
我正试图从文件夹[收件箱]接收邮件时,我的日志中出现了这个问题。 我要做的是重新启动我的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]
<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();
    }

    ...

}
问题:
1.如何更改它检查收件箱的时间?
2.两(2)分钟或更短时间是个坏主意吗?我想谷歌可能会禁止ip访问/检查收件箱

依赖关系:

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

设置
取消IDleInterval

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

对不起,如果我不清楚的话。。当你说
把一个ImapMailReceiver连接成一个bean
时,你的意思是像这样的
@bean@Qualifier(value=“ImapMailReceiver”)public-ImapMailReceiver-getImapMailReceiver(){ImapMailReceiver-ImapMailReceiver=new-ImapMailReceiver();return-ImapMailReceiver;}
?但我仍然不知道如何将
ImapMailReceiver
连接到我的
IntegrationFlow
ic,我可以设置为
ImapMailReceiver.setCancelIdleInterval(300000)持续5分钟。我现在不清楚的是如何将
ImapMailReceiver
连接到
IntegrationFlow
只需将其传递到工厂方法-请参阅对我答案的编辑。谢谢Gary!我尝试了,但是我得到了一个错误
,原因是:java.lang.IllegalStateException:外部“接收器”[imaps://abc123%40gmail.com:xxxxxxxxxx@imap.gmail.com:993/inbox]无法修改。
。这是在调用调用
assertReceiver()
shouldMarkMessagesRead
shouldDeleteMessages
时发生的。如果删除这两个,应用程序将运行。有没有一种方法可以同时调用
shouldMarkMessagesRead
shouldDeleteMessages
而不获取错误?我知道了,我可以在ImapMailReceiver中设置
shouldMarkMessagesRead
shouldDeleteMessages
。我现在没有收到任何错误。。。我将检查
cancelIdleInterval
是否已更改。如果我不清楚,请原谅。。当你说
把一个ImapMailReceiver连接成一个bean
时,你的意思是像这样的
@bean@Qualifier(value=“ImapMailReceiver”)public-ImapMailReceiver-getImapMailReceiver(){ImapMailReceiver-ImapMailReceiver=new-ImapMailReceiver();return-ImapMailReceiver;}
?但我仍然不知道如何将
ImapMailReceiver
连接到我的
IntegrationFlow
ic,我可以设置为
ImapMailReceiver.setCancelIdleInterval(300000)持续5分钟。我现在不清楚的是如何将
ImapMailReceiver
连接到
IntegrationFlow
只需将其传递到工厂方法-请参阅对我答案的编辑。谢谢Gary!我尝试了,但是我得到了一个错误
,原因是:java.lang.IllegalStateException:外部“接收器”[imaps://abc123%40gmail.com:xxxxxxxxxx@imap.gmail.com:993/inbox]无法修改。
。这是在调用调用
assertReceiver()
shouldMarkMessagesRead
shouldDeleteMessages
时发生的。如果删除这两个,应用程序将运行。有没有一种方法可以同时调用
shouldMarkMessagesRead
shouldDeleteMessages
而不获取错误?我知道了,我可以在ImapMailReceiver中设置
shouldMarkMessagesRead
shouldDeleteMessages
。我现在没有收到任何错误。。。我将检查
cancelIdleInterval
是否已更改。