从第一种方法调用第二种方法会改变第一种方法的行为

时间:2015-05-15 00:53:51

标签: java email javamail

我正在尝试向两个不同的邮件服务器发送电子邮件。我有一个指向一个邮件服务器send的方法和另一个指向不同邮件服务器sendSecond的方法。我想要将电子邮件发送到两个电子邮件服务器,但是通过在第一个邮件服务器中调用第二个邮件服务器方法,它将电子邮件两次发送到第二个邮件服务器,而不是第一个邮件服务器。为什么?如何将其发送到两个电子邮件服务器?

第一个邮件服务器:Settings.instance().getMailServerIp()

第二个邮件服务器:Settings.instance().getSecondMailServerIp()

    public synchronized void send(DefaultEmail defaultEmail, Set<User> to) {
    System.setProperty("mail.smtp.host", Settings.instance().getMailServerIp());
    Session.getDefaultInstance(System.getProperties(), null);
    executor.execute(new FutureTask<Void>(new EmailTask(defaultEmail, to)));
    sendSecond(defaultEmail, to);
}

public synchronized void sendSecond(DefaultEmail defaultEmail, Set<User> to) {
    System.setProperty("mail.smtp.host", Settings.instance().getSecondMailServerIp());
    Session.getDefaultInstance(System.getProperties(), null);
    executor.execute(new FutureTask<Void>(new EmailTask(defaultEmail, to)));
}

1 个答案:

答案 0 :(得分:3)

mail.smtp.host属性有点像全局变量。只有一个这样的设置。当您致电send时,您会创建一个FutureTask,以便稍后发送邮件。然后调用sendSecond,将mail.smtp.host更改为第二个邮件服务器,并安排第二个任务来传递邮件。

稍后,这两个未来任务都会运行并将邮件传递到当前值mail.smtp.host(现在指向第二个邮件服务器)。

您可能希望找到一种方法将邮件传递到特定的邮件服务器,而不是依赖于全局mail.smtp.host属性。