Odesílání e-mailu v C++ pomocí COM

Ukázka, jak odeslat e-mail pomocí COM komponenty v C++:

#include <iostream>
#include <comdef.h>
#include <direct.h>
#include <string.h>
#include "cdosys.h" 
#include "cdosys_i.c" 
#include "cdosysstr.h"
#include "cdosyserr.h"

using namespace CDO;
using namespace std;

void main() 
{
    IUnknown*	pUnknown;
    IMessage*     pMsg    = NULL;
    IBodyPart*    pBp     = NULL;
    IConfiguration* pConfig = NULL;
    Fields*       pFlds   = NULL;
    Field*        pFld    = NULL;

    HRESULT hr = S_OK;

    hr = CoInitialize(NULL);
    
    if(FAILED(hr))
      cout << "Nelze inicializovat..." << endl;

    cout << "Volam CoCreateInstance pro Message." << endl;
    hr = CoCreateInstance(CLSID_Message, NULL,
        CLSCTX_INPROC_SERVER, IID_IUnknown, 
        (void**)&pUnknown);

    if(FAILED(hr))
        cout << "Nelze zalozit instanci komponenty. " << endl;

	cout << "Volam QueryInterface na IMessage." << endl;
    hr = pUnknown->QueryInterface(IID_IMessage, 
                                  (void**)&pMsg);
    if(FAILED(hr))
        cout << "Nepodporovane rozhrani IMessage. " << endl;

    cout << "Uvolnuji IUnknown." << endl;
    pUnknown->Release();

    char komu[256]="";
    cout << "Zadejte, komu odeslat email:" << endl;
    cin >> komu;
    cout << "Vyplnuji Message" << endl;
    pMsg->put_To(_bstr_t(komu));
    pMsg->put_From(_bstr_t("pausp1@km1.fjfi.cvut.cz"));
    pMsg->put_Sender(_bstr_t("pausp1@km1.fjfi.cvut.cz"));
    pMsg->put_Subject(_bstr_t("Petr Paus"));
    pMsg->put_TextBody(_bstr_t("pausp1@km1.fjfi.cvut.cz"));

    char path[256];

    cout << "Priloha: ";
    _getcwd(path,255);
    strcat(path,"\\main.cpp");
    
    cout << path << endl;

    pMsg->AddAttachment(_bstr_t(path),L"",L"",&pBp);
    pBp->put_ContentMediaType(L"text/plain");
    
    cout << "Uvolnuji BodyPart" << endl;
    pBp->Release();
    pBp = NULL;
	
    cout << "Volam CoCreateInstance pro Configuration" << endl;
	
    hr = CoCreateInstance(CLSID_Configuration, NULL,
         CLSCTX_INPROC_SERVER,IID_IConfiguration,
         (void**)&pConfig);
    if(FAILED(hr))
      cout << "Nelze zalozit instanci komponenty." << endl;

    cout << "Vyplnuji Configuration" << endl;
    pConfig->get_Fields(&pFlds);

    pFlds->get_Item(_variant_t(cdoSendUsingMethod),&pFld);
    pFld->put_Value(_variant_t((long)cdoSendUsingPort));
    
    pFld->Release(); 
    pFld=NULL;

    pFlds->get_Item(_variant_t(cdoSMTPServer),&pFld);
    pFld->put_Value(_variant_t("mail.bluetone.cz"));
    pFld->Release(); 
    pFld=NULL;

    pFlds->get_Item(_variant_t(cdoSMTPServerPort),&pFld);
    pFld->put_Value(_variant_t((long)25));
    pFld->Release(); 
    pFld=NULL;

    pFlds->get_Item(_variant_t(cdoSMTPAuthenticate),&pFld);
    pFld->put_Value(_variant_t((long)cdoAnonymous)); // 0
    pFld->Release(); 
    pFld=NULL;
  
    pFlds->Update();
    pFlds->Release(); 
    pFlds=NULL;

    cout << "Zapisuji a uvolnuji Configuration" << endl;
    pMsg->putref_Configuration(pConfig);
    pConfig->Release(); 
    pConfig=NULL;

    cout << "Odesilam EMAIL" << endl;
    pMsg->Send();

    cout << "Uvolnuji IMessage." << endl;
    pMsg->Release();

    cout << "Uninitialize" << endl;
    CoUninitialize();
}
Tags: