在VC中调用默认的电子邮件程序发送邮件

原创 2002年01月30日 12:05:00

很多时候大家需要在程序中发送邮件,自己编又太麻烦,怎么办,呵呵,有现成的!


1、想省事儿的,用ShellExecute函数:


ShellExecute(NULL,NULL,"mailto:email@263.net",NULL,NULL,SW_SHOW);


2、如果想自己多处理一些东西的话,比如加上默认的帐号、密码、附件等,就可以调用系统的Mapi函数。具体的用法大家可以去查MSDN都是以MAPI开头的,如MAPILogon、MAPISendMail等。下面这段代码演示如何调用默认的邮件程序发送邮件。


//必须包括 mapi.h 头文件
#include "mapi.h"                  

/*********************************************************************
* 函数名称:CSendEMailDlg::OnSendMapi
* 说明:  调用MAPI函数发送邮件。
* 作者:  Geng
* 时间 : 2003-04-22 20:08:30
*********************************************************************/
void CSendEMailDlg::OnSendMapi()
{
        UpdateData(true);

        //装入MAPI32.DLL动态库
        HMODULE hMod = LoadLibrary("MAPI32.DLL");

        if (hMod == NULL)
        {
               AfxMessageBox(AFX_IDP_FAILED_MAPI_LOAD);
               return;
        }

        //获取发送邮件的函数地址
        ULONG (PASCAL *lpfnSendMail)(ULONG, ULONG, MapiMessage*, FLAGS, ULONG);
        (FARPROC&)lpfnSendMail = GetProcAddress(hMod, "MAPISendMail");

        if (lpfnSendMail == NULL)
        {
               AfxMessageBox(AFX_IDP_INVALID_MAPI_DLL);
               return;
        }

        int nFileCount = m_list.GetCount();   //有多少个附件需要发送

        //分配内存保存附件信息 不能使用静态数组,因为不知道要发送附件的个数
        MapiFileDesc* pFileDesc = (MapiFileDesc*)malloc(sizeof(MapiFileDesc) * nFileCount);
        memset(pFileDesc,0,sizeof(MapiFileDesc) * nFileCount);

        //分配内存保存附件文件路径
        TCHAR* pTchPath = (TCHAR*)malloc(MAX_PATH * nFileCount);

        CString szText;
        for(int i = 0;i < nFileCount;i++)
        {
               TCHAR* p = pTchPath + MAX_PATH * i;
               m_list.GetText(i,szText);
               strcpy(p,szText);

               (pFileDesc + i)->nPosition = (ULONG)-1;
               (pFileDesc + i)->lpszPathName = p;
               (pFileDesc + i)->lpszFileName = p;
        }

        //收件人结构信息
        MapiRecipDesc recip;
        memset(&recip,0,sizeof(MapiRecipDesc));
        recip.lpszAddress      = m_szEmailMAPI.GetBuffer(0);
        recip.ulRecipClass     = MAPI_TO;

        recip.lpszName          = "Your Name";
 
        //邮件结构信息
        MapiMessage message;
        memset(&message, 0, sizeof(message));
        message.nFileCount     = nFileCount;                         //文件个数
        message.lpFiles        = pFileDesc;                          //文件信息
        message.nRecipCount    = 1;                                  //收件人个数
        message.lpRecips       = &recip;                             //收件人
        message.lpszSubject    = m_szSubject.GetBuffer(0);           //主题
        message.lpszNoteText   = m_szText.GetBuffer(0);              //正文内容

        //保存本程序窗口指针,因为发完邮件后要返回本程序的窗口
        CWnd* pParentWnd = CWnd::GetSafeOwner(NULL, NULL);

        //发送邮件
        int nError = lpfnSendMail(0, 0,&message, MAPI_LOGON_UI|MAPI_DIALOG, 0);

        if (nError != SUCCESS_SUCCESS && nError != MAPI_USER_ABORT
                       && nError != MAPI_E_LOGIN_FAILURE)
        {
               AfxMessageBox(AFX_IDP_FAILED_MAPI_SEND);
        }

        //返回程序
        pParentWnd->SetActiveWindow();

        //不要忘了释放分配的内存
        free(pFileDesc);
        free(pTchPath);
        FreeLibrary(hMod);
}

版权声明:本文为博主原创文章,欢迎转载

smtp协议 VC实现发送邮件

利用VC2005实现了邮件发送,源程序如下: //-------------------------------------------------------SmtpSendEmail.h--...
  • wangwenwen
  • wangwenwen
  • 2012年05月19日 13:15
  • 6390

VC SMTP邮件发送程序

  • 2010年05月05日 07:59
  • 5.33MB
  • 下载

VC++ 邮件发送 smtp协议发送邮件

  • 2011年04月11日 18:27
  • 598KB
  • 下载

SMTP邮件发送(MFC、VC++)

  • 2013年05月14日 15:43
  • 3.64MB
  • 下载

Vc++实现邮件的发送与接收,功能很全面,同时无需填写邮件服务器地址~方便快捷~

  • 2010年03月04日 16:30
  • 8.79MB
  • 下载

电子邮件收发程序(c++版)

  • 2009年01月20日 16:19
  • 108KB
  • 下载

VC++编写电子邮件程序 第二篇 也是用simple mapi

VC++编写电子邮件程序 一、概述 ---- 本文主要讲述如何使用Visual C++用MAPI编写E-mail程序。MAPI是包含在Windows之中的, 因此不需要安装其他额外的部件...
  • pirate97
  • pirate97
  • 2014年03月27日 11:09
  • 2031

VC编程分析套接字发送带附件的电子邮件过程

 本文要分析的是带附件电子邮件的发送。发送邮件有几种方法,可以使用控件,使用MAPI,这些似乎都是基于Outlook客户端的了。但在没有安装Outlook的电脑是上就要使用套接字实现了。简单邮件的...
  • mhfh611
  • mhfh611
  • 2013年08月06日 17:08
  • 1317

9个VC++的程序:用C编程获取WPS的文件密码, 数值微分, 数值积分, 收发电子邮件, 捆绑exe文件, 矩阵计算(矩阵类), 复数计算(复数类), RS-232-C端口实时监控软件的设计实现, C直接读取dbf文件

  • 2009年11月10日 14:42
  • 957KB
  • 下载

SharePoint 中调用传出电子邮件中的邮件服务器及地址发送邮件

   也许我们习惯用通过使用System.Net.Mail中的相关类进行邮件的发送。 这其中,需要我们手动指定邮件服务器、发件人地址进行邮件的发送。 而在SharePoint中...
  • lingpaoershiyishiji
  • lingpaoershiyishiji
  • 2014年06月10日 21:09
  • 781
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VC中调用默认的电子邮件程序发送邮件
举报原因:
原因补充:

(最多只允许输入30个字)