как отправить письмо через Outlook из Java - PullRequest
1 голос
/ 16 февраля 2011

Мне нужно добавить электронную почту (с вложениями) в мою очередь исходящих сообщений MS Outlook 2000. В моей компании мы используем программное обеспечение под названием «спул-робот» (офисный пакет спула), которое выполняет поиск данных с сервера AS / 400. Я должен сделать то же самое, но чтение данных из моей базы данных MySql на Java.

Я нашел API JDIC, ​​но он готовит окно сообщения, но не отправляет электронное письмо автоматически. Я не могу использовать почту Java, потому что мне нужно использовать клиент Outlook (из-за административных ограничений).

Есть идеи?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 16 февраля 2011

Я почти уверен, что есть интерфейс COM для Outlook. Я немного осмотрелся и нашел достаточно доказательств, но никакой реальной документации, на которую можно было бы ссылаться. Outlook Developer Center представляется хорошей отправной точкой.

Использование COM из Java довольно просто с использованием Java COM Bridge, например JACOB . Я думаю, что есть коммерческие библиотеки, но JACOB был довольно прост в использовании - по крайней мере 5 лет назад, когда я последний раз использовал его:)

1 голос
/ 09 мая 2016

Вы можете управлять Outlook из Java, используя библиотеку JACOB, как указано в предыдущем комментарии. Приведенный ниже пример работает с 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");
    }
}
0 голосов
/ 16 февраля 2011

Это сделает вашу жизнь намного проще, если вам разрешат использовать SMTP-сервер Exchange, поскольку это хорошо работает с JavaMail.Системный администратор может предоставить вам имя пользователя + пароль для этой конкретной цели.

Если вы действительно ДОЛЖНЫ использовать клиент, не могли бы вы поделиться информацией о том, как это делает нынешний «спул робот»?

...