zoukankan      html  css  js  c++  java
  • VC++ 利用MAPI实现在程序中调用默认的电子邮件程序发送EMAIL(可以添加附件)。

    1.利用ShellExecute 可以条用默认邮件客户端,但不能发送带附件的邮件

    mailto:用户账号@邮件服务器地址?subject=邮件主题&body=邮件正文  
      如:ShellExecute(handle, ‘open’, ‘ mailto:who@mail.neu.edu.cn?subject=Hello&Body=This is a test’, nil, nil, SW_SHOWNORMAL);打开新邮件窗口,并自动填入收件人地址、邮件主题和邮件正文。若邮件正文包括多行文本,则必须在每行文本之间加入换行转义字符%0a。

    转载:http://blog.csdn.net/hczhiyue/article/details/6974593

    2.

    转载:http://www.vckbase.com/index.php/wv/452.html

    转载:http://blog.csdn.net/elcoteq983/article/details/7286560

     1 //必须包括 mapi.h 头文件
     2 #include "mapi.h"                     
     3  
     4  /* code 为非Unicode版本 */
     5 /*********************************************************************
     6  * 函数名称:CSendEMailDlg::OnSendMapi
     7  * 说明:  调用MAPI函数发送邮件。
     8  * 作者:  Geng
     9  * 时间 : 2003-04-22 20:08:30 
    10 *********************************************************************/
    11 void CSendEMailDlg::OnSendMapi() 
    12 {
    13         UpdateData(true);
    14  
    15         //装入MAPI32.DLL动态库
    16         HMODULE hMod = LoadLibrary("MAPI32.DLL");
    17  
    18         if (hMod == NULL)
    19         {
    20                //AfxMessageBox(AFX_IDP_FAILED_MAPI_LOAD);
    21                MessageBox(NULL,"加载失败","提示",MB_OK);
    22                return;
    23         }
    24  
    25         //获取发送邮件的函数地址
    26         ULONG (PASCAL *lpfnSendMail)(ULONG, ULONG, MapiMessage*, FLAGS, ULONG);
    27         (FARPROC&)lpfnSendMail = GetProcAddress(hMod, "MAPISendMail");
    28  
    29         if (lpfnSendMail == NULL)
    30         {
    31                AfxMessageBox(AFX_IDP_INVALID_MAPI_DLL);
    32                return;
    33         }
    34  
    35         int nFileCount = 1;   //有多少个附件需要发送,在此我设置为1
    36  
    37         //分配内存保存附件信息 不能使用静态数组,因为不知道要发送附件的个数
    38         MapiFileDesc* pFileDesc = (MapiFileDesc*)malloc(sizeof(MapiFileDesc) * nFileCount);
    39         memset(pFileDesc,0,sizeof(MapiFileDesc) * nFileCount);
    40  
    41         //分配内存保存附件文件路径
    42         TCHAR* pTchPath = (TCHAR*)malloc(MAX_PATH * nFileCount);
    43  
    44         CString szText;
    45         for(int i = 0;i < nFileCount;i++)
    46         {
    47                TCHAR* p = pTchPath + MAX_PATH * i;
    48                m_list.GetText(i,szText);
    49                strcpy(p,szText);
    50  
    51                (pFileDesc + i)->nPosition = (ULONG)-1;
    52                (pFileDesc + i)->lpszPathName = p;
    53                (pFileDesc + i)->lpszFileName = p;
    54         }
    55  
    56         //收件人结构信息
    57         MapiRecipDesc recip;
    58         memset(&recip,0,sizeof(MapiRecipDesc));
    59         recip.lpszAddress      = xxx@163.com;//收件人邮箱地址
    60         recip.ulRecipClass = MAPI_TO;
    61  
    62         //邮件结构信息
    63         MapiMessage message;
    64         memset(&message, 0, sizeof(message));
    65         message.nFileCount     = nFileCount;                         //文件个数
    66         message.lpFiles        = pFileDesc;                          //文件信息
    67         message.nRecipCount    = 1;                                  //收件人个数
    68         message.lpRecips       = &recip;                             //收件人
    69         message.lpszSubject    = "hello";                         //主题
    70         message.lpszNoteText   = "This is test";              //正文内容
    71  
    72         //发送邮件
    73         int nError = lpfnSendMail(0, 0,&message, MAPI_LOGON_UI|MAPI_DIALOG, 0);
    74  
    75         if (nError != SUCCESS_SUCCESS && nError != MAPI_USER_ABORT 
    76                        && nError != MAPI_E_LOGIN_FAILURE)
    77         {
    78               // AfxMessageBox(AFX_IDP_FAILED_MAPI_SEND);
    79              MessageBox(NULL,"发送失败","提示",MB_OK);
    80         }
    81  
    82         //不要忘了释放分配的内存
    83         free(pFileDesc);
    84         free(pTchPath);
    85         FreeLibrary(hMod);
    86 }
      1 /*Unidode 版本*/
      2 
      3 #include "mapi.h"
      4 #include <atlstr.h>
      5 
      6 std::string UnicodeToANSI(const wstring& wstr)
      7 {
      8     int unicodeLen = ::WideCharToMultiByte(CP_ACP,0,wstr.c_str(),-1,NULL,0, NULL ,NULL);
      9 
     10     if(unicodeLen == 0) return std::string("");
     11 
     12     char *pChar= new char[unicodeLen+1];
     13 
     14     memset(pChar , 0 , sizeof( char ) * (unicodeLen+1));
     15 
     16     ::WideCharToMultiByte(CP_ACP,0,wstr.c_str(),-1,pChar,unicodeLen, NULL ,NULL);
     17 
     18     pChar[unicodeLen]=0;
     19 
     20     string str = pChar;
     21 
     22     delete [] pChar;
     23     pChar=NULL;
     24 
     25     return str;
     26 }
     27 
     28 int main()
     29 {
     30 
     31 
     32         //装入MAPI32.DLL动态库
     33         HMODULE hMod = LoadLibrary(L"MAPI32.DLL");
     34 
     35         if (hMod == NULL)
     36         {
     37             
     38             return -1;
     39         }
     40 
     41         //获取发送邮件的函数地址
     42         ULONG (PASCAL *lpfnSendMail)(ULONG, ULONG, MapiMessage*, FLAGS, ULONG);
     43         (FARPROC&)lpfnSendMail = GetProcAddress(hMod, "MAPISendMail");
     44 
     45         if (lpfnSendMail == NULL)
     46         {
     47             
     48             return -1;
     49         }
     50 
     51         int nFileCount = 1;   //有多少个附件需要发送
     52 
     53         //分配内存保存附件信息 不能使用静态数组,因为不知道要发送附件的个数
     54         MapiFileDesc* pFileDesc = (MapiFileDesc*)malloc(sizeof(MapiFileDesc) * nFileCount);
     55         memset(pFileDesc,0,sizeof(MapiFileDesc) * nFileCount);
     56 
     57         //分配内存保存附件文件路径
     58         CHAR* pTchPath = (CHAR*)malloc(MAX_PATH * nFileCount);
     59 
     60         CString szText("C:\ 网站.txt");
     61 
     62         for(int i = 0;i < nFileCount;i++)
     63         {
     64             CHAR* p = pTchPath + MAX_PATH * i;
     65             
     66             string temp = UnicodeToANSI(szText.GetBuffer());
     67             strcpy   (p,temp.c_str());
     68 
     69 
     70             (pFileDesc + i)->nPosition = (ULONG)-1;
     71             (pFileDesc + i)->lpszPathName = p;
     72             (pFileDesc + i)->lpszFileName = p;
     73         }
     74 
     75         //收件人结构信息
     76         MapiRecipDesc recip;
     77         memset(&recip,0,sizeof(MapiRecipDesc));
     78         recip.lpszAddress      = "2xxxxxx1@qq.com";
     79         recip.ulRecipClass     = MAPI_TO;
     80 
     81         recip.lpszName          = "Your Name";
     82 
     83         //邮件结构信息
     84         MapiMessage message;
     85         memset(&message, 0, sizeof(message));
     86         message.nFileCount     = nFileCount;                         //文件个数
     87         message.lpFiles        = pFileDesc;                          //文件信息
     88         message.nRecipCount    = 1;                                  //收件人个数
     89         message.lpRecips       = &recip;                             //收件人
     90         message.lpszSubject    = "hello";           //主题
     91         message.lpszNoteText   = "This is test";              //正文内容
     92 
     93         
     94 
     95         //发送邮件
     96         int nError = lpfnSendMail(0, 0,&message, MAPI_LOGON_UI|MAPI_DIALOG, 0);
     97 
     98         if (nError != SUCCESS_SUCCESS && nError != MAPI_USER_ABORT 
     99             && nError != MAPI_E_LOGIN_FAILURE)
    100         {
    101            //错误提示信息
    102         }
    103 
    104 
    105         //不要忘了释放分配的内存
    106         free(pFileDesc);
    107         free(pTchPath);
    108         FreeLibrary(hMod);
    109 
    110     return 0;
    111 }

    转载:http://blog.csdn.net/ghz/article/details/13279

    转载:http://blog.csdn.net/waterathena/article/details/3346395

  • 相关阅读:
    C# 不用添加WebService引用,调用WebService方法
    贪心 & 动态规划
    trie树 讲解 (转载)
    poj 2151 Check the difficulty of problems (检查问题的难度)
    poj 2513 Colored Sticks 彩色棒
    poj1442 Black Box 栈和优先队列
    啦啦啦
    poj 1265 Area(pick定理)
    poj 2418 Hardwood Species (trie树)
    poj 1836 Alignment 排队
  • 原文地址:https://www.cnblogs.com/chechen/p/5310230.html
Copyright © 2011-2022 走看看