2015-05-15 108 views
0

我正嘗試向兩個不同的郵件服務器發送電子郵件。我有一種方法指向一個郵件服務器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))); 
} 

回答

3

mail.smtp.host物業的工作有點像一個全局變量。只有一個這樣的設置。當您致電send時,您將創建一個FutureTask,稍後傳送郵件。然後您撥打sendSecond,將mail.smtp.host更改爲第二個郵件服務器,並安排第二個任務來發送郵件。

過了一段時間,這兩個未來任務都會運行並將郵件發送到當前值mail.smtp.host(現在指向第二個郵件服務器)。

您可能會想要找到一種方法將郵件傳遞到特定的郵件服務器,而不是依賴全局mail.smtp.host屬性。

+0

謝謝,現在有道理。我怎樣才能將電子郵件發送到兩個電子郵件服務器? – Jason

+0

@Jason:恐怕我不熟悉你用來發送電子郵件的特定庫,以便給出完整的答案。快速搜索javamail API文檔表明您將要創建兩個'Session'對象,其中每個對象都包含每個服務器的特定設置。 –

相關問題