c++ - library - ¿Cómo envío un correo electrónico mediante programación de la misma manera que puedo "Enviar a un destinatario de correo" en el Explorador de Windows?
system h c++ (4)
Puede usar un comando estándar "mailto:" en el shell de Windows. Ejecutará el cliente de correo predeterminado.
ShellExecute () me permite realizar tareas de shell simples, lo que permite que el sistema se encargue de abrir o imprimir archivos. Quiero adoptar un enfoque similar para enviar un archivo adjunto de correo electrónico mediante programación.
No quiero manipular Outlook directamente, ya que no quiero suponer qué cliente de correo electrónico utiliza el usuario de forma predeterminada. No deseo enviar el correo electrónico directamente, ya que quiero que el usuario tenga la oportunidad de escribir el cuerpo del correo electrónico utilizando su cliente preferido. Por lo tanto, realmente quiero lograr exactamente lo que hace Windows Explorer cuando hago clic derecho en un archivo y selecciono Enviar a -> Destinatario de correo.
Estoy buscando una solución C ++.
Tendrá que implementar un cliente MAPI. Esto le permitirá rellenar el documento, agregar archivos adjuntos, etc. antes de presentar el mensaje al usuario para enviarlo. Puede usar el almacén de mensajes predeterminado para usar su cliente de correo predeterminado.
El siguiente ejemplo de C ++ muestra cómo invocar el acceso directo de correo SendTo utilizado por el Explorador de Windows:
Esta es mi solución 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;
}