从第一种方法调用第二种方法会更改第一种方法的行为
问题描述:
我正尝试向两个不同的邮件服务器发送电子邮件。我有一种方法指向一个邮件服务器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
属性。
谢谢,现在有道理。我怎样才能将电子邮件发送到两个电子邮件服务器? – Jason
@Jason:恐怕我不熟悉你用来发送电子邮件的特定库,以便给出完整的答案。快速搜索javamail API文档表明您将要创建两个'Session'对象,其中每个对象都包含每个服务器的特定设置。 –