弹簧启动读取和新邮件侦听器在弹簧启动启动邮件上



我想使用该 Web 应用程序中的spring boot MVC演示电子邮件应用程序,我按照本教程进行操作,我可以使用 Spring 启动轻松发送电子邮件。

我的问题是

  1. 如何使用 Spring 启动阅读电子邮件..?
  2. 如何收听新电子邮件以及如何更新视图上的收件箱..?

请向我建议任何解决方案,因为我搜索了很多,但我只能找到发送电子邮件示例。如果您有任何使用 Spring Boot 的工作示例,请分享我。提前谢谢。

您可以考虑使用 Spring 集成邮件支持

有一个Java DSL用于此目的。
可以在此处找到 IMAP 配置的示例

关键方面是这样的

@Configuration
@EnableIntegration
public class IntegrationConfig {
    ...
    @Bean
    public IntegrationFlow imapIdleFlow() {
        return IntegrationFlows
                .from(Mail.imapIdleAdapter("imap://user:pw@localhost:" + imapIdleServer.getPort() + "/INBOX")
                        .autoStartup(true)
                        .searchTermStrategy(this::fromAndNotSeenTerm)
                        .userFlag("testSIUserFlag")
                        .javaMailProperties(p -> p.put("mail.debug", "false")
                                .put("mail.imap.connectionpoolsize", "5"))
                        .shouldReconnectAutomatically(false)
                        .headerMapper(mailHeaderMapper()))
                .channel(MessageChannels.queue("imapIdleChannel"))
                .get();
    }
    @Bean
    public HeaderMapper<MimeMessage> mailHeaderMapper() {
        return new DefaultMailHeaderMapper();
    }
    private SearchTerm fromAndNotSeenTerm(Flags supportedFlags, Folder folder) {
        try {
            FromTerm fromTerm = new FromTerm(new InternetAddress("bar@baz"));
            return new AndTerm(fromTerm, new FlagTerm(new Flags(Flags.Flag.SEEN), false));
        }
        catch (AddressException e) {
            throw new RuntimeException(e);
        }
    }
}
package com.grandview.service;
import java.io.IOException;
import java.util.Properties;
import javax.annotation.PostConstruct;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import com.grandview.model.EmailConfig;
import com.grandview.util.MessageParser;
@Service
public class EmailService {
    @Autowired
    private EmailConfig emailConfig;
    Folder emailFolder;
    Store store;
    Properties properties = new Properties();
    @PostConstruct
    void setup() {
        String server = emailConfig.getHost();
        properties.put("mail.pop3.host", server);
        properties.put("mail.pop3.port", emailConfig.getPort());
        //properties.put("mail.pop3.starttls.enable", "true");
        Session emailSession = Session.getDefaultInstance(properties);
        Store store = null;
        try {
            store = emailSession.getStore("pop3s");
            store.connect(server, emailConfig.getUsername(), emailConfig.getPassword());
            emailFolder = store.getFolder("INBOX");
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
    @Scheduled(fixedRate = 5000)
    synchronized void read() throws MessagingException, IOException {
        emailFolder.open(Folder.READ_ONLY);
        Message[] messages = emailFolder.getMessages();
        for (int i = 0; i < messages.length; i++) {
            Message message = messages[i];
            System.out.println(MessageParser.getMessageBody(message));
        }
        emailFolder.close();
    }
}
如果你问如何接收基于Spring Boot和

Java库接收邮件的电子邮件(例如Subetha SMTP),你可以检查使用SubEtha SMTP和Spring Boot接收电子邮件

通过工作示例分享另一个解决方案:

使用 JavaMail API、IMAP 协议和 IMAP IDLE 功能阅读传入的电子邮件。

  1. 使用 JavaMail API 进行 IMAP 连接,它为 IMAP 提供实现。
  2. 为了进行监视,我们需要 IMAP IDLE 功能,该功能允许我们的应用程序在新邮件到达邮箱时立即接收通知,而不是依赖于定期轮询。

请参阅此处的详细实现:https://medium.com/@sushant7/how-to-monitor-incoming-emails-in-a-spring-boot-application-indefinitely-7dabbdb74b2d

最新更新