繁体   English   中英

无法在特定时间使用@Scheduled 发送邮件

[英]unable to send mails at certain time using @Scheduled

当我尝试使用调度程序发送邮件时,电子邮件在执行时触发,但未按计划触发。 预计它会在每周五下午 6:00 触发邮件。 在我的代码中,我将 @scheduler 中的 cronjob 设置为 // @Scheduled(cron = "0 0 18 ? 1/1 FRI#3 *") 和 // @Scheduled(cron = "0 0 18 ? 1/1 FRI#1 *")。

 package com.example.Filter;h

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

@SpringBootApplication
@EnableScheduling
public class FilterApplication {
    private static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/dealinsights?useSSL=false&allowPublicKeyRetrieval=true", "*****",
                "******");
    }

    private static JSONObject parseMapToJSONObject(HashMap<String, HashMap<String, JSONArray>> map) {
        JSONObject jsonObject = new JSONObject();
        try {
            for (String key : map.keySet()) {
                HashMap<String, JSONArray> innerMap = map.get(key);
                JSONObject innerJSON = new JSONObject();
                for (String innerKey : innerMap.keySet()) {
                    JSONArray jsonArray = innerMap.get(innerKey);
                    innerJSON.put(innerKey, jsonArray);
                }
                jsonObject.put(key, innerJSON);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jsonObject;
    }

    private static HashMap<String, HashMap<String, JSONArray>> parseResultSetToMap(ResultSet result, String[] parse) {
        HashMap<String, HashMap<String, JSONArray>> map = new LinkedHashMap<String, HashMap<String, JSONArray>>();
        try {
            while (result.next()) {
                String bu = result.getString("bu") != null ? result.getString("bu") : "";
                String bidManager = result.getString("bid_manager") != null ? result.getString("bid_manager") : "";
                String report = result.getString("report") != null ? result.getString("report") : "";
                String total = result.getString("total") != null ? result.getString("total") : "";
                String bidManagerMail = result.getString("bid_manager_mail") != null
                        ? result.getString("bid_manager_mail") : "";
                HashMap<String, JSONArray> innerMap = map.get(bu) != null ? map.get(bu)
                        : new HashMap<String, JSONArray>();
                HashMap<String, JSONArray> Map = map.get(bidManagerMail) != null ? map.get(bidManagerMail)
                        : new HashMap<String, JSONArray>();
                JSONArray jsonArray = innerMap.get(bidManager) != null ? innerMap.get(bidManager) : new JSONArray();
                JSONArray jsonArrayMail = innerMap.get(bidManagerMail) != null ? innerMap.get(bidManagerMail)
                        : new JSONArray();
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("report", report);
                jsonObject.put("total", total);
                jsonObject.put("bid_manager_mail", bidManagerMail);
                jsonArray.put(jsonObject);
                innerMap.put(bidManager, jsonArray);
                map.put(bu, innerMap);

            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return map;
    }

    // @Scheduled(cron = "0 0 18 ? 1/1 FRI#1 *")
    // @Scheduled(cron = "0 0 18 ? 1/1 FRI#3 *")
    // @Scheduled(cron = "0 45 10 ? 1/1 FRI#4 *")
    @Scheduled(cron = "0/10 * * * * ?")
    private static void sendEmail(Session session, String fromAddress, String[] toAddress, String[] ccAddress,
            String[] bccAddress, String subject, String body) throws AddressException, MessagingException {
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(fromAddress));
        for (String to : toAddress)
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
        for (String cc : ccAddress)
            message.addRecipient(Message.RecipientType.CC, new InternetAddress(cc));
        for (String bcc : bccAddress)
            message.addRecipient(Message.RecipientType.BCC, new InternetAddress(bcc));
        message.setSubject(subject);
        message.setContent(body, "text/html");
        Transport.send(message);
        long now = System.currentTimeMillis() / 1000;
        System.out.println("schedule tasks using cron jobs - " + now);
    }

    public static void main(String[] args) throws AddressException, MessagingException, ClassNotFoundException {
        String host = "*******";
        String port = "25";
        final String user = "*******";
        final String password = "******";

        String to = "******";

        Properties props = new Properties();
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.port", port);
        props.put("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(user, password);
            }
        });

        String msg = "yes";

        String report = "";
        String total1 = null;

        // try {
        // String technologyText = " ";
        // String commsmediaText = " ";
        // String totalDynamicKey = null;
        // String myDriver = "com.mysql.cj.jdbc.Driver";
        // Class.forName(myDriver);
        // Connection connection = getConnection();
        // CallableStatement callableStatement = connection
        // .prepareCall("{call get_pursuit_quality_report_filter_data()}");
        // ResultSet result = callableStatement.executeQuery();
        // String[] parse = { "report", "bu", "bid_manager", "total",
        // "bid_manager_mail" };
        // HashMap<String, HashMap<String, JSONArray>> map =
        // parseResultSetToMap(result, parse);
        // JSONObject jsonObject = parseMapToJSONObject(map);
        // JSONObject Technology = jsonObject.getJSONObject("Technology");
        // JSONObject commsmedia = jsonObject.getJSONObject("CommsMedia");
        // Iterator keys = Technology.keys();
        // while (keys.hasNext()) {
        // totalDynamicKey = (String) keys.next();
        // // System.out.println("keys:" + totalDynamicKey);
        // JSONArray totalDynamicValue =
        // Technology.getJSONArray(totalDynamicKey);
        // JSONObject objMail = totalDynamicValue.getJSONObject(0);
        // String bidMail = objMail.optString("bid_manager_mail");
        // technologyText += "This is " + totalDynamicKey
        // + "'s Report for any furthur queries please reach out to " + bidMail
        // + "<br/>";
        // technologyText += "<table width='100%' border='1' align='center'>" +
        // "<tralign='center'>"
        // + "<td><b> Report <b></td>" + "<td><b> Total <b></td>" + "</tr>";
        //
        // for (int j = 0; j < totalDynamicValue.length(); j++) {
        // JSONObject obj = totalDynamicValue.getJSONObject(j);
        // total1 = obj.getString("total");
        // report = obj.getString("report");
        //
        // technologyText += "<tralign='center'>" + "<td>" + report + "</td>" +
        // "<td>" + total1 + "</td>"
        // + "</tr>";
        // }
        // technologyText += "</table>" + "<br/>" + "<br/>";
        // }
        // technologyText += "Thank You" + "<br/>" + "DealInsights Portal Tool
        // Team.";
        // Iterator keyss = commsmedia.keys();
        // while (keyss.hasNext()) {
        // totalDynamicKey = (String) keyss.next();
        // JSONArray totalDynamicValue =
        // commsmedia.getJSONArray(totalDynamicKey);
        // JSONObject objMail = totalDynamicValue.getJSONObject(0);
        // String bidMail = objMail.optString("bid_manager_mail");
        // commsmediaText += "This is " + totalDynamicKey
        // + "'s Report for any furthur queries please reach out to " + bidMail
        // + "<br/>";
        // commsmediaText += "<table width='100%' border='1' align='center'>" +
        // "<tralign='center'>"
        // + "<td><b> Report <b></td>" + "<td><b> Total <b></td>" + "</tr>";
        //
        // for (int i = 0; i < totalDynamicValue.length(); i++) {
        // JSONObject obj = totalDynamicValue.getJSONObject(i);
        // total1 = obj.getString("total");
        // report = obj.getString("report");
        //
        // commsmediaText += "<tralign='center'>" + "<td>" + report + "</td>" +
        // "<td>" + total1 + "</td>"
        // + "</tr>";
        // }
        // commsmediaText += "</table>" + "<br/>" + "<br/>";
        // }
        // commsmediaText += "Thank You" + "<br/>" + "DealInsights Portal Tool
        // Team.";
        // String[] toAddress = { "******" };
        // String[] ccAddress = { "****" };
        // String[] bccAddress = {};
        // sendEmail(session, user, toAddress, ccAddress, bccAddress, "Data
        // quality reports for Technology",
        // technologyText);
        // System.out.println(" Technology message sent successfully...");
        //
        // String[] tocommsAddress = { "******" };
        // String[] cccommsAddress = { "****",
        // ****" };
        // String[] bcccoAddress = {};
        // sendEmail(session, user, tocommsAddress, cccommsAddress,
        // bcccoAddress,
        // "Data quality reports for CommsMedia", commsmediaText);
        // System.out.println(" Commsmedia message sent successfully...");
        //
        // }
        //
        // catch (SQLException e) {
        // // TODO Auto-generated catch block
        // e.printStackTrace();
        // }

        try {

            String body = "HI";
            String[] toAddress = { ****** };
            String[] ccAddress = { ******};
            String[] bccAddress = {};
            sendEmail(session, user, ccAddress, ccAddress, bccAddress, "Scheduler Testing", body);
            System.out.println("Mail successfully sent");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }

}

您的主机必须是 smtp.office365.com。 此外,您必须确保至少使用 TLSv1.2。

    final Properties config = new Properties();
    config.put("mail.smtp.auth", "true");
    config.put("mail.smtp.starttls.enable", "true");
    config.put("mail.smtp.starttls.required", "true");
    config.put("mail.smtp.ssl.protocols", "TLSv1.2");
    config.put("mail.smtp.port", "587");
    config.put("mail.smtp.host", "smtp.office365.com");

微软在这里写了这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM