Java:打开默认邮件客户端

时间:2013-12-13 07:10:13

标签: java email

我有一个定期解析我的邮件收件箱的软件。程序的功能取决于运行的默认邮件程序。

如何从java中启动默认邮件程序?

我知道您可以使用Desktop类:

来实现这一目标
Desktop.getDesktop().mail()

但除了启动默认邮件客户端之外,它还会打开一个我不想要的新电子邮件窗口 如何在不打开“撰写新电子邮件”窗口的情况下打开默认邮件客户端?

编辑:我正在尝试使用此代码段提取myselve信息:http://support.microsoft.com/kb/180233/en-us但由于此代码无法编译(与大多数微软代码段一样,当你不是一个C ++开发人员并且只需要一些代码时非常糟糕,因为它缺少对&lpProfileTable的引用。丢失的代码怎么样?

1 个答案:

答案 0 :(得分:1)

以下是MSDN示例的外观:

#define UNICODE
#define _UNICODE
#define STRICT

#include <windows.h>
#include <mapix.h>

#include <iostream>

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev,
                   LPSTR lpCmdLine, int nShowCmd) {
    // Get a IProfAdmin Interface.
    LPPROFADMIN lpProfAdmin;
    HRESULT hr = MAPIAdminProfiles(0, &lpProfAdmin);

    // Get the Table of Profiles
    LPMAPITABLE lpProfileTable;
    hr = lpProfAdmin->GetProfileTable(0, &lpProfileTable);

    // Build a restriction where PR_DEFAULT_PROFILE = TRUE
    SPropValue spvDefaultProfile;
    spvDefaultProfile.ulPropTag = PR_DEFAULT_PROFILE;
    spvDefaultProfile.Value.b = TRUE;

    SRestriction sres;
    sres.rt = RES_PROPERTY;
    sres.res.resProperty.relop = RELOP_EQ;
    sres.res.resProperty.ulPropTag = PR_DEFAULT_PROFILE;
    sres.res.resProperty.lpProp = &spvDefaultProfile;

    hr = lpProfileTable->Restrict(&sres, TBL_BATCH);
    hr = lpProfileTable->FindRow(&sres, BOOKMARK_BEGINNING, 0);

    LPSRowSet pRow = NULL;
    hr = lpProfileTable->QueryRows(1, 0, &pRow);
     // We have a match
    if (SUCCEEDED(hr)) {
        LPSTR lpDisplayName = pRow->aRow[0].lpProps[0].Value.lpszA;
        std::cout << lpDisplayName;
    }
}

它在g ++下编译,但我无法弄清楚如何链接可执行文件......