java 调用dll实现exchange server发email和保存email到Drafts

来源:互联网 发布:linux 清空tmp 编辑:程序博客网 时间:2024/04/30 11:59

java项目需要使用outlook exchange server发email和保存已发email到drafts

在网上查找了很多java call exchange server的方法和call outlook的方法,要不就很复杂,要不就要licence,非常麻烦,考虑了很久,最后决定使用exchange server的outlook client来发送email,把和exchange server的交互交给client,java只负责和outlook client交互。

而与outlook交互最简单的方法就是用VB来调用,又直观又方便,所以打算先用VB写一个和outlook交互的DLL,然后再使用java call这个DLL实现email的sent和save to drafts。

首先,VB调用outlook。

VB CODE(网上很多):

*************************************************************************************

Dim MsOutlook, NS, draftFldrs
Function InitializeOutlook()
  InitializeOutlook = True
  Err.Clear
  On Error Resume Next
  Set MsOutlook = CreateObject("Outlook.Application")
  If Err.Number <> 0 Then
    Err.Clear
    Set MsOutlook = CreateObject("Outlook.Application.11")
  End If
  Set NS = MsOutlook.GetNamespace("MAPI")
 
  Set draftFldrs = NS.Folders("FY2010").Folders("Drafts")

  If Err.Number <> 0 Then
    InitializeOutlook = False
 
  End If

End Function


Sub AddItemToDraft(mSubject, mHTMLBody, mTo, mToCC, mToBCC)
 
  Set MI = MsOutlook.CreateItem(olMailItem)
 
  MI.Subject = mSubject
 
  MI.HTMLBody = mHTMLBody 
  MI.To = mTo
  MI.CC = mToCC
  MI.BCC = mToBCC 
  MI.Save  
    Set MI = Nothing
   
End Sub
Private Sub Class_Initialize()
   
   InitializeOutlook

End Sub
Public Sub SendEmail(mSubject, mHTMLBody, mTo, mToCC, mToBCC)
 
  Set MI = MsOutlook.CreateItem(olMailItem)
 
 
 
  MI.Subject = mSubject

 
  MI.HTMLBody = mHTMLBody
     
 
  MI.To = mTo
  MI.CC = mToCC
  MI.BCC = mToBCC

   
  MI.Send
   Set MI = Nothing
End Sub
Public Sub CloseFunction()
Call Class_Terminate
End Sub
Public Sub callsendAndsave(mSubject, mHTMLBody, mTo, mToCC, mToBCC)
Call SendEmail(mSubject, mHTMLBody, mTo, mToCC, mToBCC)
Call AddItemToDraft(mSubject, mHTMLBody, mTo, mToCC, mToBCC)
End Sub

Private Sub Class_Terminate()
    Set MsOutlook = Nothing
  
End Sub

*******************************************************************************

用VB build 一个DLL

再把dll拷贝到system32里

再用regsvr32进行注册

 

接下来是主要的java call dll了

先准备的dll和jar

-jacob-1.15-M3-x86.dll
-XXX.dll(VB生成的dll)
-jacob.jar

 

把jacob-1.15-M3-x86.dll拷贝到system32

再把vb生成的dll和jacob.jar导入java工程里

然后

写一个类

exp(我的dll名称是prjSendMail.dll,动态库里的类的名称是Class1,要调用的方法名是callsendAndsave):

*************************************************************************************

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;

public class EmailSenderImpl

{

   ActiveXComponent pp;
   Dispatch dpA ;

    public void init()

  {    
        pp= new ActiveXComponent("prjSendMail.Class1");

        dpA = (Dispatch) pp.getObject();

  } 
   public void sendEmail()

  {       
        Dispatch.call(dpA, "callsendAndsave", subJect, bodyHtml, to, cc, bcc);

   }

}

 

 

原创粉丝点击