spring boot定时收取邮件+发送webhook

application.yml配置邮件参数

mail:
  host: imap.163.com
  port: 143
  username: 1234@163.com
  password: 不是邮件密码,是那个授权码
  protocol: imap

webhook:
  url: (webhook网址)

EmailReceiverService.java 接收邮件的类

package com.run.server;

import com.run.config.CommonConfig;
import com.run.config.WebhookConfig;
import jakarta.mail.Folder;
import jakarta.mail.Message;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.InternetAddress;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Properties;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.eclipse.angus.mail.imap.IMAPFolder;
import org.eclipse.angus.mail.imap.IMAPStore;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class EmailReceiverService {

    private static final Logger log = LoggerFactory.getLogger(EmailReceiverService.class);
    @Autowired
    private JavaMailSenderImpl mailSender;

    @Autowired
    private WebhookConfig webhookConfig;

    @Autowired
    private CommonConfig commonConfig;

    public EmailReceiverService(JavaMailSenderImpl mailSender) {
        this.mailSender = mailSender;
        Properties properties = new Properties();
        properties.setProperty("mail.store.protocol", mailSender.getProtocol());
        properties.setProperty("mail.imap.host", mailSender.getHost());
        properties.setProperty("mail.imap.port", String.valueOf(mailSender.getPort()));
        properties.setProperty("mail.imap.starttls.enable", "true");
        properties.setProperty("mail.imap.auth", "true");
        mailSender.setJavaMailProperties(properties);
        this.startTime = System.currentTimeMillis();
    }

    public Runnable receiveEmail() throws Exception {
        IMAPStore store = (IMAPStore) mailSender.getSession().getStore("imap");
        store.connect(mailSender.getUsername(), mailSender.getPassword());

        //这部分是解决异常的地方,设置IAMP ID信息 这个value的值随便写就行
        HashMap IAM = new HashMap();
        IAM.put("name","myname");
        IAM.put("version","1.0.0");
        IAM.put("vendor","myclient");
        IAM.put("support-email","testmail@test.com");
        store.id(IAM);

        IMAPFolder inbox = (IMAPFolder) store.getFolder("INBOX");
        inbox.open(Folder.READ_ONLY);

        int count = inbox.getMessageCount();
        for(Message message : inbox.getMessages()) {
            // 邮件处理
            String msg = message.getSubject();
			sendWebHook(msg);
        }

        size = count;
        inbox.close(false);
        store.close();
        return null;
    }

    private void sendWebHook(String msg){
        String url = webhookConfig.getUrl();
        String body = "{\"msgtype\":\"text\", \"text\": {\"content\": \"" +msg+"\"}";

        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<String> entity = new HttpEntity<>(body, headers);
        ResponseEntity<String> res = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
        this.startTime = System.currentTimeMillis();
    }
}

EmailRunner.java 定时执行接收邮件的类

package com.run.task;
import com.run.server.EmailReceiverService;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

@Configuration
@EnableScheduling
public class EmailRunner {
    private final EmailReceiverService emailService;

    public EmailRunner(EmailReceiverService emailService) {
        this.emailService = emailService;
    }

    @Scheduled(cron = "30 * * * * *") // 每30s执行一次
    private void runMail(){
        System.out.println("Email running...");

        try {
            emailService.receiveEmail();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值