Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;通过Outlook发送HTML电子邮件_C++_Windows_Outlook 2007 - Fatal编程技术网

C++ C++;通过Outlook发送HTML电子邮件

C++ C++;通过Outlook发送HTML电子邮件,c++,windows,outlook-2007,C++,Windows,Outlook 2007,[目标] 基本C++控制台应用程序需要能够通过Outlook 2007(运行最小化)发送HTML电子邮件-附件是不必要的。这个方法适用于纯文本,我不确定是否可以修改它以适应HTML的要求。我在某个地方读到,也许你可以引用一个附件,它将成为身体。我只是不知道下一步该怎么办。建议 [我目前掌握的情况] BOOL SendMail(CHAR *lpszFrom, CHAR *lpszTo, CHAR *lpszSubject, CHAR *lpszMessage) { BOOL bSent =

[目标]

基本C++控制台应用程序需要能够通过Outlook 2007(运行最小化)发送HTML电子邮件-附件是不必要的。这个方法适用于纯文本,我不确定是否可以修改它以适应HTML的要求。我在某个地方读到,也许你可以引用一个附件,它将成为身体。我只是不知道下一步该怎么办。建议

[我目前掌握的情况]

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;
}
打电话给

SendMail("from","to","subject","body");

看起来MAPI不适合HTML电子邮件


我已经通过MFC发送了HTML电子邮件,但那不是MAPI。

我发送了一封电子邮件,要求做同样的事情-我发现附加HTML文件会导致HTML文件被用于电子邮件正文中

下面的代码是在这个网站(某处)找到的,它工作得很好

代码
bool-SendMail(HWND-hWndParent,std::string-strAttachmentFileName,std::string-strSubject,std::string&err)
{
//附件必须作为文件存在于系统中
//否则MAPISendMail将失败,所以。。。。。。
if(strAttachmentFileName.empty())
返回false;
//您可能希望删除此支票,但如果
//传入HWND后,将创建邮件对话框
//对它的父级进行模态分析。
//如果(!hWndParent | |!::IsWindow(hWndParent))
//返回false;
HINSTANCE hMAPI=::LoadLibraryA(“MAPI32.DLL”);
如果(!hMAPI)
返回false;
//获取MAPISendMail函数的导出入口点
ULONG(PASCAL*SendMail)(ULONG,ULONG_PTR,
MapiMessage*,标志,ULONG);
(FARPROC&)SendMail=GetProcAddress(hMAPI,
“发送邮件”);
如果(!SendMail)
返回false;
//TCHAR szFileName[_MAX_PATH];
//TCHAR szPath[_MAX_PATH];
//TCHAR szSubject[_MAX_PATH];
//::strcpy(&szFileName[0],strAttachmentFileName.c_str());
//::strcpy(&szPath[0],strAttachmentFileName.c_str());
//::strcpy(&szSubject[0],strSubject.c_str());
MapiFileDesc fileDesc;
::零内存(&fileDesc,sizeof(fileDesc));
fileDesc.nPosition=(ULONG)-1;
fileDesc.lpszPathName=(char*)strAttachmentFileName.c_str();
fileDesc.lpszFileName=(char*)strAttachmentFileName.c_str();
MapiMessage消息;
::零内存(&message,sizeof(message));
message.lpszSubject=(char*)strSubject.c_str();//&szSubject[0];//szSubject;
message.nFileCount=1;
message.lpFiles=&fileDesc;
//可以发送
int Nrror=SendMail(0,(ULONG_PTR)hWndParent,
&消息,MAPI_登录| MAPI_对话框,0);
如果(错误!=SUCCESS\u SUCCESS&&
错误!=MAPI\u用户\u中止(&U)
错误!=MAPI\u E\u登录失败)
err=“error”;
返回false;
err=“ok”;
返回true;
}