java 调用dll实现exchange server发email和保存email到Drafts
2011-05-25 15:45
281 查看
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);
}
}
在网上查找了很多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);
}
}
相关文章推荐
- 在Windows中实现Java调用DLL(转载)
- 巧用C#做中间语言 实现Java调用.net DLL
- java调用windows DLL实现底层处理(C++编程)
- java opencv 调用摄像头实现拍照及本地保存 支持上传FTP 路径配置
- Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能
- Java进阶: 使用 Jni 调用 Dll 的实现(使用VS2008 生成Dll)
- Java调用C/C++实现的DLL动态库——JNI
- 巧用C#做中间语言 实现Java调用.net DLL的方法
- java运用jni调用dll实现屏蔽系统热键和任务栏
- Android下c++调用java实现内置外置sd卡MP3扫描并保存在文件中
- 巧用C#做中间语言 实现Java调用.net DLL的方法
- jni java调用c++实现的dll
- 使用JNI技术实现JAVA程序调用dll
- 使用JNI技术实现JAVA程序调用dll
- 一种实现 Java调用C++的DLL的方法
- Java调用C/C++实现的DLL动态库——JNI
- 使用 Jni 调用 Dll 的实现JAVA在cmd控制台刷屏
- 用面向对象实现支付功能、用线程实现龟兔赛跑、Java调用CMD运行adb命令并保存结果及归档
- 巧用C#做中间语言 实现Java调用.net DLL
- java中调用GDAL DLL的实现方法