分享
 
 
 

调用默认的电子邮件程序发送EMail

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

调用默认的电子邮件程序发送EMail

作者:耿海增

下载本文示例工程

示例代码运行效果图如下:

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

1、我们可以用ShellExecute函数简单的调用默认的电子邮件程序:

ShellExecute(NULL,NULL,"mailto:email@163.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;

//邮件结构信息

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);

}

(全文完)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有