如何从java通过outlook发送电子邮件

如何从java通过outlook发送电子邮件,java,outlook,jakarta-mail,Java,Outlook,Jakarta Mail,我需要在我的MS Outlook 2000输出msgs队列中添加电子邮件(带附件)。在我的公司里,我们使用一种叫做“spool robot”(spool办公套件)的软件,它可以从AS/400服务器检索数据。我必须做同样的事情,但是用Java从MySql数据库读取数据 我找到了JDICAPI,但它准备了消息窗口,但它不会自动发送电子邮件。我不能使用Java mail,因为我需要使用Outlook客户端(由于管理限制) 有什么想法吗 谢谢。我很确定Outlook有一个COM界面。我环顾四周,找到了足

我需要在我的MS Outlook 2000输出msgs队列中添加电子邮件(带附件)。在我的公司里,我们使用一种叫做“spool robot”(spool办公套件)的软件,它可以从AS/400服务器检索数据。我必须做同样的事情,但是用Java从MySql数据库读取数据

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

有什么想法吗


谢谢。

我很确定Outlook有一个COM界面。我环顾四周,找到了足够的证据,但没有真正的文档可以链接到。不过,这似乎是一个很好的起点

使用Java中的COM是非常直接的,使用Java COM桥接器就像。我认为有商业图书馆可用,但JACOB使用起来非常直接-
至少在5年前,当我上次使用它时:)

如果允许您使用Exchange SMTP服务器,那么您的生活会轻松得多,因为它与JavaMail配合得很好。系统管理员可能为此目的向您提供用户名+密码


如果您真的必须使用该客户端,您可以分享当前“spool robot”如何使用它的详细信息吗?

您可以使用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] = "test1@test.com";
to[1] = "test2@test.com";
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");
    }
}
//---------------------------------------------------------------------
Map params=新的HashMap();
参数put(“受试者”、“受试者”);
参数put(“正文”,“请参见附件”);
字符串附件[]=新字符串[2];
附件[0]=“C:/Test1.pdf”;
附件[1]=“C:/Test2.pdf”;
参数put(“附件”,附件);
字符串到[]=新字符串[2];
至[0]=”test1@test.com";
至[1]=”test2@test.com";
参数put(“to”,to);
OutlookJACOB mail=新OutlookJACOB();
mail.createEmail(param);
//---------------------------------------------------------------------
导入java.util.Map;
导入com.jacob.activeX.ActiveXComponent;
导入com.jacob.com.Dispatch;
导入com.jacob.com.Variant;
公共课展望
{
私有ActiveXComponent ol;
私人派遣展望;
私有对象mapi[]=新对象[1];
私有对象电子邮件[]=新对象[1];
公众了望
{
mapi[0]=“mapi”;
电子邮件[0]=0;
ol=新的ActiveXComponent(“Outlook.Application”);
outlook=ol.getObject();
调用(outlook,“GetNamespace”,mapi).toDispatch();
}
public void createEmail(映射参数)
{
Dispatch mail=Dispatch.call(outlook,“CreateItem”,email).toDispatch();
发送(邮件“主题”,参数“主题”);
发送(邮件“Body”,参数“get”(“Body”);
字符串to[]=(字符串[])参数get(“to”);
字符串附件[]=(字符串[])参数获取(“附件”);
如果(到!=null)
{
如果(到长度>0)
{
字符串_to=“”;
for(对象t:to)
{
_to+=t+“;”;
}
发送(邮寄至);
}
}
如果(附件!=null)
{
如果(附件长度>0)
{
Dispatch attachs=Dispatch.get(邮件,“附件”).toDispatch();
用于(对象附件:附件)
{
调度呼叫(附件“添加”,附件);
}
}
}
发送、呼叫(邮件“保存”);
}
}

我不知道线轴机器人是如何工作的。我们不使用Exchange服务器:(Maurtto,也许它会有助于研究。与Outlook交互,你可能会考虑在.NET中代替java来做它。它只是更适合这个任务。也许这是最好的方法,但我对.NET一无所知,我也要设置.NET环境。啊,也许我也需要VisualStudio许可证!)可以在几个免费的快速版本中使用。我真诚地相信,如果你学习一个更好的工具来完成任务,而不是开始处理Java COM桥,那么总的工作量会更少,结果也不会那么脆弱。这是一个起点,现在谢谢你。我已经找到了一个商业库,但它确实很贵!在网上冲浪很多次之后,我会纳利发现了这个…它似乎起作用了!!!