2013-07-04 79 views
0

從一個Java程序中,我想通過用戶的本地郵件客戶端自動發送郵件。Java通過本地郵件客戶端自動發送郵件

我使用下面的代碼打開客戶端並填寫必填字段,但是如何在沒有任何用戶交互的情況下自動發送它?

private void sendMail() throws MessagingException { 
    try { 
     Desktop.getDesktop().mail(new URI("mailto:[email protected]?subject=someSubject&[email protected],[email protected]&[email protected]&body=someBodyText")); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

基本上我想發送不離開公司網絡的郵件。

+2

沒有API,它與每一個郵件客戶端的工作,所以最好的選擇是使用[Java郵件API(http://www.mkyong.com/java/javamail -api-sending-email-via-gmail-smtp-example /)並直接發送郵件。 – nif

+0

我已經在用Java郵件API玩了,我的主要問題是我不知道哪個郵件服務器將在客戶機上運行。我爲以下屬性使用了什麼值:mail.smtp.host。我知道客戶端將在包含郵件服務器的本地網絡中,但我不知道它的「名稱」。 – Markus

回答

1

答案是Java Mail API

基本上,您需要一個郵件帳戶(通常是用戶名+密碼),您還需要郵件SP的SMTP服務器地址,這通常是在他們的網站上。

+0

該應用程序將運行在各種完全獨立的網絡上。我所知道的是,每個網絡都會有一個郵件服務器,但我不知道它的地址。任何簡單的方法來檢索這些信息,也許從註冊表? – Markus

+0

您需要了解更多關於這些網絡的信息,請不要假設他們的配置。詢問管理員,就您的程序如何與環境進行交互建立協議。 –

+0

那麼如果沒有辦法找到它,我將不得不要求用戶提供這些信息。我希望能以某種方式從用戶的郵件客戶端中提取這些信息。 – Markus

0

我找到了一種方法來處理至少前景,該指南如下:Vogella, Eclipse-Microsoft Integration

基本上我用OleClientSite類調用前景。然後我使用oleAutomation類發送郵件。

代碼片段:

  Shell shell = new Shell(Display.getDefault()); 
      OleFrame frame = new OleFrame(shell, SWT.NONE); 
      // This should start outlook if it is not running yet 
      OleClientSite site = new OleClientSite(frame, SWT.NONE, "OVCtl.OVCtl"); 
      site.doVerb(OLE.OLEIVERB_INPLACEACTIVATE); 
      // Now get the outlook application 
      OleClientSite site2 = new OleClientSite(frame, SWT.NONE, 
       "Outlook.Application"); 
      OleAutomation outlook = new OleAutomation(site2); 
      // 
      OleAutomation mail = invoke(outlook, "CreateItem", 0 /* Mail item */) 
       .getAutomation(); 
      setProperty(mail, "To", "[email protected]"); /* 
            * Empty but could also be 
            * predefined 
            */ 

      setProperty(mail, "Bcc", "[email protected]"); /* 
            * Empty but could also be 
            * predefined 
            */ 

      setProperty(mail, "BodyFormat", 2 /* HTML */); 
      setProperty(mail, "Subject", "Top News for you"); 
      setProperty(mail, "HtmlBody", 
       "<html>Hello<p>, please find some infos here.</html>"); 

      invoke(mail, "Send" /* or "Send" */); 
相關問題