从第一个方法调用第二个方法会改变第一个方法的行为
Calling second method from first method changes behaviour of first method
我正在尝试向两个不同的邮件服务器发送电子邮件。我有一个指向一个邮件服务器 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)));
}
mail.smtp.host
属性 有点像全局变量。只有一种这样的设置。当您调用 send
时,您创建了一个 FutureTask
用于稍后传递邮件。然后调用 sendSecond
,将 mail.smtp.host
更改为第二个邮件服务器,并安排第二个任务来传递邮件。
稍后,这些未来任务 运行 和将邮件发送到 mail.smtp.host
的当前值(现在指向第二个邮件服务器)。
您可能希望找到一种方法将邮件传送到 特定的 邮件服务器,而不是依赖全局 mail.smtp.host
属性。
我正在尝试向两个不同的邮件服务器发送电子邮件。我有一个指向一个邮件服务器 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)));
}
mail.smtp.host
属性 有点像全局变量。只有一种这样的设置。当您调用 send
时,您创建了一个 FutureTask
用于稍后传递邮件。然后调用 sendSecond
,将 mail.smtp.host
更改为第二个邮件服务器,并安排第二个任务来传递邮件。
稍后,这些未来任务 运行 和将邮件发送到 mail.smtp.host
的当前值(现在指向第二个邮件服务器)。
您可能希望找到一种方法将邮件传送到 特定的 邮件服务器,而不是依赖全局 mail.smtp.host
属性。