如何避免Java中的代码重复 public static void sendMail(String[]to,String subject,String messageBody,String[]cc,String[]bcc)引发异常{ Properties props=System.getProperties(); props.put(“mail.transport.protocol”、“smtp”); props.put(“mail.smtp.port”,port); props.put(“mail.smtp.starttls.enable”、“true”); props.put(“mail.smtp.auth”,“true”); Session Session=Session.getDefaultInstance(props); MimeMessage msg=新MimeMessage(会话); msg.setFrom(新的InternetAddress(from,fromname)); InternetAddress[]toAddress=新的InternetAddress[to.length]; for(int i=0;i

如何避免Java中的代码重复 public static void sendMail(String[]to,String subject,String messageBody,String[]cc,String[]bcc)引发异常{ Properties props=System.getProperties(); props.put(“mail.transport.protocol”、“smtp”); props.put(“mail.smtp.port”,port); props.put(“mail.smtp.starttls.enable”、“true”); props.put(“mail.smtp.auth”,“true”); Session Session=Session.getDefaultInstance(props); MimeMessage msg=新MimeMessage(会话); msg.setFrom(新的InternetAddress(from,fromname)); InternetAddress[]toAddress=新的InternetAddress[to.length]; for(int i=0;i,java,jakarta-mail,Java,Jakarta Mail,在本文中,我们在两种方法中使用相同的代码。 我想将公共代码放在另一个方法中。 我将尝试将该公共代码放在另一个方法中,然后我们将尝试调用该方法,但这两种方法都不起作用。 如果我们试图在两种方法中调用一个公共方法,那么它将只适用于一种方法 请给我一些建议。看起来您可以编写第二个方法来使用第一个方法,使用空数组: public static void sendMail(String[] to, String subject, String messageBody, String[] cc, Strin

在本文中,我们在两种方法中使用相同的代码。 我想将公共代码放在另一个方法中。 我将尝试将该公共代码放在另一个方法中,然后我们将尝试调用该方法,但这两种方法都不起作用。 如果我们试图在两种方法中调用一个公共方法,那么它将只适用于一种方法


请给我一些建议。

看起来您可以编写第二个方法来使用第一个方法,使用空数组:

public static void sendMail(String[] to, String subject, String messageBody, String[] cc, String[] bcc) throws Exception {
    Properties props = System.getProperties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.port", PORT);
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.auth", "true");
    Session session = Session.getDefaultInstance(props);
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(from, fromname));
    InternetAddress[] toAddress = new InternetAddress[to.length];
    for (int i = 0; i < to.length; i++) {
        toAddress[i] = new InternetAddress(to[i]);    
    }
    for (int i = 0; i < toAddress.length; i++) {
        msg.addRecipient(Message.RecipientType.TO, toAddress[i]);
    }
    msg.setSubject(subject);
    msg.setContent(messageBody, "text/html");
    if(cc[0] != "") {
        InternetAddress[] ccAddress = new InternetAddress[cc.length];
        for (int i = 0; i < cc.length; i++) {
            ccAddress[i] = new InternetAddress(cc[i]);
        }
        for (int i = 0; i < ccAddress.length; i++) {
            msg.addRecipient(Message.RecipientType.CC, ccAddress[i]);
        }
    }
    if(bcc[0] != "") {
        InternetAddress[] bccAddress = new InternetAddress[bcc.length];
        for (int i = 0; i < bcc.length; i++) {
            bccAddress[i] = new InternetAddress(bcc[i]);
        }
        for (int i = 0; i < bccAddress.length; i++) {
            msg.addRecipient(Message.RecipientType.BCC, bccAddress[i]);
        }
    }
    Transport transport = session.getTransport();
    try {
        System.out.println("Sending...");
        transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
        transport.sendMessage(msg, msg.getAllRecipients());
        System.out.println("Email sent!");
    } catch (Exception ex) {
        System.out.println("The email was not sent.");
        System.out.println("Error message: " + ex.getMessage());
    } finally {
        transport.close();
    }
}
public static void sendMail(String[] to, String subject, String messageBody) throws Exception {
    Properties props = System.getProperties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.port", PORT);
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.auth", "true");
    Session session = Session.getDefaultInstance(props);
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(from, fromname));
    InternetAddress[] toAddress = new InternetAddress[to.length];
    for (int i = 0; i < to.length; i++) {
        toAddress[i] = new InternetAddress(to[i]);
    }
    for (int i = 0; i < toAddress.length; i++) {
        msg.addRecipient(Message.RecipientType.TO, toAddress[i]);
    }
    msg.setSubject(subject);
    msg.setContent(messageBody, "text/html");
    Transport transport = session.getTransport();
    try {
        System.out.println("Sending...");
        transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
        transport.sendMessage(msg, msg.getAllRecipients());
        System.out.println("Email sent!");
    } catch (Exception ex) {
        System.out.println("The email was not sent.");
        System.out.println("Error message: " + ex.getMessage());
    } finally {
        transport.close();
    }
}
这将在cc和bcc数组中传入一个空字符串,以便其他方法跳过该数组

请注意,您将自己置于NullPointerException的开放状态:

public static void sendMail(String[] to, String subject, String messageBody) throws Exception {
    sendMail(to, subject, messageBody, new String[]{""}. new String[]{""});
}
这是盲目地假设cc数组至少包含一个元素。 如果要使用空数组调用该方法,或者对cc或bcc调用null,则程序将抛出异常。 在if语句中,您已经在使用cc.length,所以如果cc.length为零,则不会添加任何cc地址。 该测试的更好实现可能是:

if(cc[0] != "") { ... }
另外,我不知道为什么构建ccAddress阵列只是为了丢弃它。 这里是相同的循环,用单个ccAddress对象替换ccAddress数组

if (cc != null && cc.length > 0) {...}
if(cc!=null&&cc.length>0){
对于(int i=0;i
您可以做的最简单的事情是实现第二个方法,这样它就可以调用第一个方法,而不会添加任何抄送或密件抄送收件人。根据您当前的代码,它可以是:

if(cc != null && cc.length > 0) {
    for (int i = 0; i < cc.length; i++) {
        InternetAddress ccAddress = new InternetAddress(cc[i]);
        msg.addRecipient(Message.RecipientType.CC, ccAddress);
    }
}

你不必再做另一种方法。参数计数较低的方法只调用参数计数较高且值为null的方法,然后在“real”方法中进行null检查

public static void sendMail(String[]to,String subject,String messageBody,String[]cc,String[]bcc)引发异常{
Properties props=System.getProperties();
props.put(“mail.transport.protocol”、“smtp”);
props.put(“mail.smtp.port”,port);
props.put(“mail.smtp.starttls.enable”、“true”);
props.put(“mail.smtp.auth”,“true”);
Session Session=Session.getDefaultInstance(props);
MimeMessage msg=新MimeMessage(会话);
msg.setFrom(新的InternetAddress(from,fromname));
InternetAddress[]toAddress=新的InternetAddress[to.length];
for(int i=0;ipublic static void sendMail(String[] to, String subject, String body) {
    sendMail(to, subject, body, new Object[]{""}, new Object[]{""});
}
public static void sendMail(String[] to, String subject, String messageBody, String[] cc, String[] bcc) throws Exception {
    Properties props = System.getProperties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.port", PORT);
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.auth", "true");
    Session session = Session.getDefaultInstance(props);
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(from, fromname));
    InternetAddress[] toAddress = new InternetAddress[to.length];
    for (int i = 0; i < to.length; i++) {
        toAddress[i] = new InternetAddress(to[i]);    
    }
    for (int i = 0; i < toAddress.length; i++) {
        msg.addRecipient(Message.RecipientType.TO, toAddress[i]);
    }
    msg.setSubject(subject);
    msg.setContent(messageBody, "text/html");
    if(cc != null && cc[0] != "") {
        InternetAddress[] ccAddress = new InternetAddress[cc.length];
        for (int i = 0; i < cc.length; i++) {
            ccAddress[i] = new InternetAddress(cc[i]);
        }
        for (int i = 0; i < ccAddress.length; i++) {
            msg.addRecipient(Message.RecipientType.CC, ccAddress[i]);
        }
    }
    if(bcc != null && bcc[0] != "") {
        InternetAddress[] bccAddress = new InternetAddress[bcc.length];
        for (int i = 0; i < bcc.length; i++) {
            bccAddress[i] = new InternetAddress(bcc[i]);
        }
        for (int i = 0; i < bccAddress.length; i++) {
            msg.addRecipient(Message.RecipientType.BCC, bccAddress[i]);
        }
    }
    Transport transport = session.getTransport();
    try {
        System.out.println("Sending...");
        transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);
        transport.sendMessage(msg, msg.getAllRecipients());
        System.out.println("Email sent!");
    } catch (Exception ex) {
        System.out.println("The email was not sent.");
        System.out.println("Error message: " + ex.getMessage());
    } finally {
        transport.close();
    }
}

public static void sendMail(String[] to, String subject, String messageBody) throws Exception {
    sendMail(to, subject, messageBody, null, null);
}