• JAVA使用多个邮箱账号发送邮箱


    JAVA使用多个邮箱账号发送邮箱

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
            </dependency>

    application.yml配置文件(邮箱):

    spring:
      mail:
        username: 邮箱账号@qq.com,邮箱账号@sina.com//多个邮箱以逗号隔开
        password: 123123,hfnjpxafjeigbhde//确保邮箱已经开启SMTP服务,有授权码则使用授权码,没有则使用登陆密码
        host: smtp.qq.com,smtp.afwaf.com//邮箱对应host地址
        properties:
          mail.smtp.auth: true
          mail.smtp.starttls: true

    MyJavaMailSenderImpl

    @Configuration
    @EnableConfigurationProperties(MailProperties.class)
    @Slf4j
    public class MyJavaMailSenderImpl extends JavaMailSenderImpl implements JavaMailSender {
    
        private ArrayList<String> accountList = null;
        private ArrayList<String> passwordList = null;
        private ArrayList<String> hostList = null;
    
        private int currentMailId = 0;
    
        public final MailProperties properties;
    
        public MyJavaMailSenderImpl(MailProperties properties) {
            this.properties = properties;
            if (hostList == null) {
                hostList = new ArrayList<>();
                String[] hosts = this.properties.getHost().split(",");//获取配置文件host地址,并以,切割.添加到ArrayList中
                if (hosts != null) {
                    for (String ht : hosts) {
                        hostList.add(ht);
                    }
                }
            }
    
            if (accountList == null) {
                accountList = new ArrayList<>();
            }
            String[] username = this.properties.getUsername().split(",");//获取配置文件邮箱用户名并以,切割
            if (username != null) {
                for (String user : username) {
                    accountList.add(user);
                }
            }
            if (passwordList == null) {
                passwordList = new ArrayList<>();
            }
            String[] passwords = this.properties.getPassword().split(",");//获取密码
            if (passwords != null) {
                for (String password : passwords) {
                    passwordList.add(password);
                }
            }
        }
    
        @Override
        protected void doSend(MimeMessage[] mimeMessages, Object[] originalMessages) throws MailException {
            super.setUsername(accountList.get(currentMailId));
            super.setPassword(passwordList.get(currentMailId));
            super.setHost(hostList.get(currentMailId));
            log.info("发送Host: --------------"+super.getHost());
            log.info("发送账号: --------------"+super.getUsername());
            super.setDefaultEncoding(this.properties.getDefaultEncoding().name());
            super.setJavaMailProperties(asProperties(this.properties.getProperties()));
            try {
                super.doSend(mimeMessages, originalMessages);
            }catch (Exception e){
                log.info("doSend():异常");
                e.printStackTrace();
            }
            currentMailId = ((currentMailId + 1) % accountList.size());
        }
    
        private Properties asProperties(Map<String, String> source) {
            Properties properties = new Properties();
            properties.putAll(source);
            return properties;
        }
    
        @Override
        public String getUsername() {
            return accountList.get(currentMailId);
        }
    MyJavaMailComponent
    @Slf4j
    @Component
    public class MyJavaMailComponent {
    
        @Autowired
        private MyJavaMailSenderImpl myJavaMailSenderImpl;
    
        @Autowired
        private CrawlMapper crawlMapper;
    
        public int sendMail(String to, String text, int pid) {
            Map<String, Object> map = new HashMap<String, Object>();
            int row = 0;
            map.put("email", to);
            try {
                String result = send(to, text);
                if (result.equals("success")) {
                    row = crawlMapper.updateStatusByContext(pid);
                }
                boolean resu = result.equals("success") ? true : false;
                boolean resu2 = row > 0 ? true : false;
                log.info("邮箱发送结果:" + resu + ", 数据库状态修改:" + resu2);
            } catch (IOException e) {
                e.printStackTrace();
                row = 0;
            } catch (MessagingException e) {
                e.printStackTrace();
                row = 0;
            }
            return row;
        }
    
        public int sendMailTwoDay(String to, String text) {
            Map<String, Object> map = new HashMap<String, Object>();
            int row = 0;
            map.put("email", to);
            try {
                String result = send(to, text);
            } catch (IOException e) {
                e.printStackTrace();
                row = 0;
            } catch (MessagingException e) {
                e.printStackTrace();
                row = 0;
            }
            return row;
        }
    
        private String send(String email, String text) throws MessagingException, UnsupportedEncodingException {
            MimeMessage message = myJavaMailSenderImpl.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
            InternetAddress from = new InternetAddress();
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
            String date = simpleDateFormat.format(new Date());
            from.setAddress(myJavaMailSenderImpl.getUsername());
            from.setPersonal("我是一份警告邮件", "UTF-8");
            helper.setFrom(from);
            helper.setTo(email);
            helper.setSubject(date + "-信息反馈");
            helper.setText(text, true);
            myJavaMailSenderImpl.send(message);
            return "success";
        }

    发送方法

    @Scheduled(cron = "0 0 * * * ?")//每小时的第0分0秒执行
        public void sendEmail() {
             mailComponent.sendMail(对方邮箱, 发送内容);
             }
        }
    阁下何不同风起,扶摇直上九万里。
  • 相关阅读:
    Python中append和extend的区别
    python学习 day19
    python学习 day18
    QT下编写使用for循环动态添加刻选择时间类型的按钮(记录一下)
    QT mingw编译器下使用snap7库与西门子200smart-PLC(网口)通信实现代码
    看着挺胖的大胖猫
    QT添加软键盘后,QDialog设置模态后软键盘没响应解决办法
    QT程序打包在别的电脑上运行提示“api-ms-win-crt-runtime-|1-1-0.dll"可能与您正在运行的Window版本不兼容。。。。。
    Qt使用WM_COPYDATA消息进行进程通信
    离线百度地图,QT添加按钮点击切换卫星地图和街道地图
  • 原文地址:https://www.cnblogs.com/mlyun/p/10838700.html
Copyright © 2020-2023  润新知