2011-02-16 109 views
1

我需要在我的MS Outlook 2000输出消息队列中添加电子邮件(附件)。在我的公司,我们使用一种叫做“短管理机器人”(spool office suite)的软件,它可以从AS/400服务器上检索数据。我必须这样做,但是从Java MySql数据库中读取数据。如何通过Outlook发送电子邮件

我找到了JDIC API,但它准备了消息窗口,但它不会自动发送电子邮件。我无法使用Java邮件,因为我需要使用Outlook客户端(由于管理限制)。

任何想法?

谢谢。

回答

2

我很确定有一个用于Outlook的COM接口。我环顾了一下,发现了足够的证据,但没有可以链接到的真实文档。 Outlook Developer Center似乎是一个很好的起点。

从Java使用COM是非常直接的使用Java的COM桥,如JACOB。我认为有商业图书馆可用,但JACOB是非常直接使用 - 至少5年前,当我上次使用它:)

+0

这是一个起点,谢谢你。我找到了一个商业图书馆,但它真的很贵! – mauretto 2011-02-16 11:08:40

+0

在网上冲浪了很多后,我终于找到了[snippet](http://sourceforge.net/projects/jacob-project/forums/forum/375945/topic/3822393“链接”)...它似乎工作! – mauretto 2011-02-16 14:08:07

0

它会让你的生活更容易,如果你可以被允许使用Exchange SMTP服务器,因为这与JavaMail很好地协作。系统管理员可能会为您提供用于此特定用途的用户名和密码。

如果你真的必须使用客户端,你能分享一下当前的“短管机器人”是如何做的吗?

1

您可以使用前面的注释中所述的JACOB库从Java操作Outlook。以下示例适用于Microsoft Outlook 2010和2013.本示例创建草稿电子邮件并将其保存到Outlook中的草稿文件夹。

//--------------------------------------------------------------------- 
Map<String, Object> params = new HashMap<String, Object>(); 
param.put("subject", "Test subject"); 
param.put("body", "Please see attached."); 

String attachment[] = new String[2]; 
attachment[0] = "C:/Test1.pdf"; 
attachment[1] = "C:/Test2.pdf"; 
param.put("attachments", attachment); 

String to[] = new String[2]; 
to[0] = "[email protected]"; 
to[1] = "[email protected]"; 
param.put("to", to); 

OutlookJACOB mail = new OutlookJACOB(); 
mail.createEmail(param); 
//--------------------------------------------------------------------- 

import java.util.Map; 

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

public class OutlookJACOB 
{ 
    private ActiveXComponent ol; 
    private Dispatch outlook; 
    private Object mapi[] = new Object[1]; 
    private Object email[] = new Object[1]; 

    public OutlookJACOB() 
    { 
     mapi[0] = "MAPI"; 
     email[0] = 0; 

     ol = new ActiveXComponent("Outlook.Application"); 
     outlook = ol.getObject(); 
     Dispatch.call(outlook,"GetNamespace",mapi).toDispatch(); 
    } 

    public void createEmail(Map<String, Object> params) 
    { 
     Dispatch mail = Dispatch.call(outlook,"CreateItem",email).toDispatch(); 
     Dispatch.put(mail, "Subject", params.get("subject")); 
     Dispatch.put(mail, "Body", params.get("body")); 

     String to[] = (String[]) params.get("to"); 
     String attachments[] = (String[]) params.get("attachments"); 

     if(to != null) 
     { 
      if(to.length>0) 
      { 
       String _to = ""; 

       for(Object t : to) 
       { 
        _to += t + ";"; 
       } 

       Dispatch.put(mail, "To", _to); 
      } 
     } 

     if(attachments != null) 
     { 
      if(attachments.length>0) 
      { 
       Dispatch attachs = Dispatch.get(mail, "Attachments").toDispatch(); 

       for(Object attachment : attachments) 
       { 
        Dispatch.call(attachs, "Add", attachment); 
       } 
      } 
     } 

     Dispatch.call(mail, "Save"); 
    } 
}