zoukankan      html  css  js  c++  java
  • 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(对方邮箱, 发送内容);
             }
        }
    阁下何不同风起,扶摇直上九万里。
  • 相关阅读:
    table-layout:fixed 布局注意事项
    resize 按钮不会被伪元素遮盖
    background-size:100% 100% 时 background-position: % 失效
    利用 background 和 filter 模糊指定区域
    window.location.href = window.location.href 跳转无反应 a 超链接 onclick 点击跳转无反应
    如何在前台脚本通过json传递数据到后台(使用微软自带的ajax)
    .clear 万能清除浮动
    个人博客开通了
    Mysql The user specified as a definer ('test'@'%') does not exist
    MERGE INTO 解决大数据量复杂操作更新慢的问题
  • 原文地址:https://www.cnblogs.com/mlyun/p/10838700.html
Copyright © 2011-2022 走看看