繁体   English   中英

如何以与我在Windows资源管理器中“发送到邮件收件人”相同的方式以编程方式发送电子邮件?

[英]How do I programmatically send an email in the same way that I can “Send To Mail Recipient” in Windows Explorer?

ShellExecute()允许我执行简单的shell任务,允许系统负责打开或打印文件。 我想采用类似的方法以编程方式发送电子邮件附件。

我不想直接操作Outlook,因为我不想假设用户默认使用哪个电子邮件客户端。 我不想直接发送电子邮件,因为我希望用户有机会使用他们的首选客户端编写电子邮件正文。 因此,当我右键单击文件并选择Send To - > Mail Recipient时,我真的想要完成Windows资源管理器的功能。

我正在寻找一个C ++解决方案。

这是我的MAPI解决方案:

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

int _tmain( int argc, wchar_t *argv[] )
{
    HMODULE hMapiModule = LoadLibrary( _T( "mapi32.dll" ) );

    if ( hMapiModule != NULL )
    {
        LPMAPIINITIALIZE lpfnMAPIInitialize = NULL;
        LPMAPIUNINITIALIZE lpfnMAPIUninitialize = NULL;
        LPMAPILOGONEX lpfnMAPILogonEx = NULL;
        LPMAPISENDDOCUMENTS lpfnMAPISendDocuments = NULL;
        LPMAPISESSION lplhSession = NULL;

        lpfnMAPIInitialize = (LPMAPIINITIALIZE)GetProcAddress( hMapiModule, "MAPIInitialize" );
        lpfnMAPIUninitialize = (LPMAPIUNINITIALIZE)GetProcAddress( hMapiModule, "MAPIUninitialize" );
        lpfnMAPILogonEx = (LPMAPILOGONEX)GetProcAddress( hMapiModule, "MAPILogonEx" );
        lpfnMAPISendDocuments = (LPMAPISENDDOCUMENTS)GetProcAddress( hMapiModule, "MAPISendDocuments" );

        if ( lpfnMAPIInitialize && lpfnMAPIUninitialize && lpfnMAPILogonEx && lpfnMAPISendDocuments )
        {
            HRESULT hr = (*lpfnMAPIInitialize)( NULL );

            if ( SUCCEEDED( hr ) )
            {
                hr = (*lpfnMAPILogonEx)( 0, NULL, NULL, MAPI_EXTENDED | MAPI_USE_DEFAULT, &lplhSession );

                if ( SUCCEEDED( hr ) )
                {
                    // this opens the email client with "C:\attachment.txt" as an attachment
                    hr = (*lpfnMAPISendDocuments)( 0, ";", "C:\\attachment.txt", NULL, NULL );

                    if ( SUCCEEDED( hr ) )
                    {
                        hr = lplhSession->Logoff( 0, 0, 0 );
                        hr = lplhSession->Release();
                        lplhSession = NULL;
                    }
                }
            }

            (*lpfnMAPIUninitialize)();
        }

        FreeLibrary( hMapiModule );
    }

    return 0;
}

您可以在Windows shell中使用标准的“mailto:”命令。 它将运行默认邮件客户端。

以下C ++示例演示如何调用Windows资源管理器使用的SendTo邮件快捷方式:

http://www.codeproject.com/KB/shell/sendtomail.aspx

您需要实现MAPI客户端。 这将允许您在向用户发送消息之前预填充文档,添加附件等。 您可以使用默认邮件存储来使用其默认邮件客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM