Программа командной строки C ++ для отправки электронной почты - PullRequest
1 голос
/ 06 октября 2010

Я использую VS2008 & C ++ и пытаюсь создать программу командной строки, которая отправляет электронное письмо.
Я посмотрел онлайн и нашел несколько примеров программ, но ни одна из них не скомпилируется для меня.
У кого-нибудь есть пример программы для меня?Спасибо

Ответы [ 3 ]

2 голосов
/ 09 октября 2010

Этот код компилируется и запускается для меня - после определения правильных заголовков и т. Д. Все еще требуется обработка командной строки, и использование библиотек MAPI не рекомендуется, но что вы хотите бесплатно?Оригинальный код от codeproject.com

#include "windows.h"
#include "tchar.h"

#include "mapi.h"
#include "assert.h"
#define ASSERT assert
#define VERIFY assert

BOOL SendMail(CHAR *lpszFrom, CHAR *lpszTo, CHAR *lpszSubject, CHAR *lpszMessage)
{
   BOOL bSent = FALSE;

   HINSTANCE hMAPI = ::LoadLibrary(_T("mapi32.dll"));
   if(0==hMAPI) return bSent;

   typedef ULONG (FAR PASCAL *PFN_MAPILogon)(ULONG,LPTSTR,LPTSTR,FLAGS,ULONG,LPLHANDLE);
   typedef ULONG (FAR PASCAL *PFN_MAPISendMail)(LHANDLE,ULONG,lpMapiMessage,FLAGS,ULONG);
   typedef ULONG (FAR PASCAL *PFN_MAPILogoff)(LHANDLE,ULONG,FLAGS,ULONG);

   PFN_MAPILogon MAPILogon = (PFN_MAPILogon)::GetProcAddress(hMAPI,"MAPILogon");
   PFN_MAPISendMail MAPISendMail = (PFN_MAPISendMail)::GetProcAddress(hMAPI,"MAPISendMail");
   PFN_MAPILogoff MAPILogoff = (PFN_MAPILogoff)::GetProcAddress(hMAPI,"MAPILogoff");

   const BOOL bFunctionsLoaded = (0!=MAPILogon)&&(0!=MAPISendMail)&&(0!=MAPILogoff);
   ASSERT(bFunctionsLoaded);

   if(bFunctionsLoaded)
   {

      LHANDLE session = 0;
      VERIFY(SUCCESS_SUCCESS==MAPILogon(0,0,0,MAPI_NEW_SESSION,0,&session));
      ASSERT(0!=session);

      MapiRecipDesc recipient;
      ::ZeroMemory(&recipient,sizeof(recipient));
      recipient.ulRecipClass = MAPI_TO;
      recipient.lpszName = lpszTo;

      MapiMessage message;
      ::ZeroMemory(&message,sizeof(message));
      message.lpszSubject = lpszSubject;
      message.lpszNoteText = lpszMessage;
      message.nRecipCount = 1;
      message.lpRecips = &recipient;

      bSent = SUCCESS_SUCCESS == MAPISendMail(session,0,&message,0,0);

      VERIFY(SUCCESS_SUCCESS==MAPILogoff(session,0,0,0));

   }

   ::FreeLibrary(hMAPI);

   return bSent;
}

int _tmain(int argc, _TCHAR* argv[])
{
   SendMail("from_you@go_daddy.com","to.someone@gmail.com","Test subject","New Message");
    return 0;
}
1 голос
/ 06 октября 2010

Взгляните на это: http://sourceforge.net/projects/blat/files/

0 голосов
/ 10 октября 2010

Поскольку вашим сервером является Exchange, наиболее удобным способом написания программы для отправки электронной почты будет использование C # и System.Net.Mail , как показано здесь . Вот код C ++ / CLI:

   static void CreateTestMessage2( String^ server )
   {
      String^ to = L"jane@contoso.com";
      String^ from = L"ben@contoso.com";
      MailMessage^ message = gcnew MailMessage( from,to );
      message->Subject = L"Using the new SMTP client.";
      message->Body = L"Using this new feature, you can send an e-mail message from an application very easily.";
      SmtpClient^ client = gcnew SmtpClient( server );

      // Credentials are necessary if the server requires the client 
      // to authenticate before it will send e-mail on the client's behalf.
      client->UseDefaultCredentials = true;
      client->Send( message );
      client->~SmtpClient();
   }

Если вы действительно хотите использовать собственный C ++ (то есть не иметь доступа к System.Net.Mail через C ++ / CLI), то вы застряли с одним из собственных API, описанных здесь .

Однако вы можете использовать MapiSend или blat , как описано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...