Spring spring-boot-starter-mail 上的启动读取和新邮件侦听器
Spring boot read and new mail Listener on spring-boot-starter-mail
我想在该 Web 应用程序中使用 spring boot MVC
演示 电子邮件应用程序 我遵循 this 教程 我可以使用 [= 轻松发送电子邮件33=]开机。
我的问题是
- 如何使用 spring 引导阅读电子邮件?
- 如何收听新电子邮件以及如何在视图上更新收件箱..?
请给我建议任何解决方案,因为我搜索了很多但我只能找到发送电子邮件 example.please 如果你有任何 工作样本 与我分享spring开机。提前致谢。
您可以考虑使用 Spring integration mail support
有一个 Java DSL 用于此目的。
可以找到 IMAP 配置示例 here
重点是这样的
@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);
}
}
}
如果您询问如何接收基于 Spring 引导和 mail-receiving 的 Java 库(例如 Subetha SMTP)的电子邮件,您可以检查 Receive emails with SubEtha SMTP and Spring Boot
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();
}
}
我想在该 Web 应用程序中使用 spring boot MVC
演示 电子邮件应用程序 我遵循 this 教程 我可以使用 [= 轻松发送电子邮件33=]开机。
我的问题是
- 如何使用 spring 引导阅读电子邮件?
- 如何收听新电子邮件以及如何在视图上更新收件箱..?
请给我建议任何解决方案,因为我搜索了很多但我只能找到发送电子邮件 example.please 如果你有任何 工作样本 与我分享spring开机。提前致谢。
您可以考虑使用 Spring integration mail support
有一个 Java DSL 用于此目的。
可以找到 IMAP 配置示例 here
重点是这样的
@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);
}
}
}
如果您询问如何接收基于 Spring 引导和 mail-receiving 的 Java 库(例如 Subetha SMTP)的电子邮件,您可以检查 Receive emails with SubEtha SMTP and Spring Boot
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();
}
}