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

时间:2011-02-16 09:56:54

标签: java outlook javamail

我需要在MS Outlook 2000 outgs msgs队列中添加电子邮件(带附件)。在我的公司,我们使用称为“假脱机机器人”(假脱机办公套件)的软件,它从AS / 400服务器检索数据。我必须这样做,但是用Java从MySql数据库中读取数据。

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

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:2)

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

使用Java中的COM非常简单,使用像JACOB这样的Java COM Bridge。我认为有商业图书馆,但JACOB非常直接使用 - 至少5年前,当我上次使用它时:)

答案 1 :(得分: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] = "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");
    }
}

答案 2 :(得分:0)

如果可以允许您使用Exchange SMTP服务器,这将使您的生活更加轻松,因为这适用于JavaMail。系统管理员可能会为您提供用于此特定目的的用户名+密码。

如果你真的必须使用客户端,你能分享一下目前“线轴机器人”如何做到这一点的细节吗?