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

 //必须包括 mapi.h 头文件
#include "mapi.h" /* code 为非Unicode版本 */
/*********************************************************************
* 函数名称: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);
MessageBox(NULL,"加载失败","提示",MB_OK);
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 = ; //有多少个附件需要发送,在此我设置为1 //分配内存保存附件信息 不能使用静态数组,因为不知道要发送附件的个数
MapiFileDesc* pFileDesc = (MapiFileDesc*)malloc(sizeof(MapiFileDesc) * nFileCount);
memset(pFileDesc,,sizeof(MapiFileDesc) * nFileCount); //分配内存保存附件文件路径
TCHAR* pTchPath = (TCHAR*)malloc(MAX_PATH * nFileCount); CString szText;
for(int i = ;i < nFileCount;i++)
{
TCHAR* p = pTchPath + MAX_PATH * i;
m_list.GetText(i,szText);
strcpy(p,szText); (pFileDesc + i)->nPosition = (ULONG)-;
(pFileDesc + i)->lpszPathName = p;
(pFileDesc + i)->lpszFileName = p;
} //收件人结构信息
MapiRecipDesc recip;
memset(&recip,,sizeof(MapiRecipDesc));
recip.lpszAddress = xxx@.com;//收件人邮箱地址
recip.ulRecipClass = MAPI_TO; //邮件结构信息
MapiMessage message;
memset(&message, , sizeof(message));
message.nFileCount = nFileCount; //文件个数
message.lpFiles = pFileDesc; //文件信息
message.nRecipCount = ; //收件人个数
message.lpRecips = &recip; //收件人
message.lpszSubject = "hello"; //主题
message.lpszNoteText = "This is test"; //正文内容 //发送邮件
int nError = lpfnSendMail(, ,&message, MAPI_LOGON_UI|MAPI_DIALOG, ); if (nError != SUCCESS_SUCCESS && nError != MAPI_USER_ABORT
&& nError != MAPI_E_LOGIN_FAILURE)
{
// AfxMessageBox(AFX_IDP_FAILED_MAPI_SEND);
MessageBox(NULL,"发送失败","提示",MB_OK);
} //不要忘了释放分配的内存
free(pFileDesc);
free(pTchPath);
FreeLibrary(hMod);
}
 /*Unidode 版本*/

 #include "mapi.h"
#include <atlstr.h> std::string UnicodeToANSI(const wstring& wstr)
{
int unicodeLen = ::WideCharToMultiByte(CP_ACP,,wstr.c_str(),-,NULL,, NULL ,NULL); if(unicodeLen == ) return std::string(""); char *pChar= new char[unicodeLen+]; memset(pChar , , sizeof( char ) * (unicodeLen+)); ::WideCharToMultiByte(CP_ACP,,wstr.c_str(),-,pChar,unicodeLen, NULL ,NULL); pChar[unicodeLen]=; string str = pChar; delete [] pChar;
pChar=NULL; return str;
} int main()
{ //装入MAPI32.DLL动态库
HMODULE hMod = LoadLibrary(L"MAPI32.DLL"); if (hMod == NULL)
{ return -;
} //获取发送邮件的函数地址
ULONG (PASCAL *lpfnSendMail)(ULONG, ULONG, MapiMessage*, FLAGS, ULONG);
(FARPROC&)lpfnSendMail = GetProcAddress(hMod, "MAPISendMail"); if (lpfnSendMail == NULL)
{ return -;
} int nFileCount = ; //有多少个附件需要发送 //分配内存保存附件信息 不能使用静态数组,因为不知道要发送附件的个数
MapiFileDesc* pFileDesc = (MapiFileDesc*)malloc(sizeof(MapiFileDesc) * nFileCount);
memset(pFileDesc,,sizeof(MapiFileDesc) * nFileCount); //分配内存保存附件文件路径
CHAR* pTchPath = (CHAR*)malloc(MAX_PATH * nFileCount); CString szText("C:\\ 网站.txt"); for(int i = ;i < nFileCount;i++)
{
CHAR* p = pTchPath + MAX_PATH * i; string temp = UnicodeToANSI(szText.GetBuffer());
strcpy (p,temp.c_str()); (pFileDesc + i)->nPosition = (ULONG)-;
(pFileDesc + i)->lpszPathName = p;
(pFileDesc + i)->lpszFileName = p;
} //收件人结构信息
MapiRecipDesc recip;
memset(&recip,,sizeof(MapiRecipDesc));
recip.lpszAddress = "2xxxxxx1@qq.com";
recip.ulRecipClass = MAPI_TO; recip.lpszName = "Your Name"; //邮件结构信息
MapiMessage message;
memset(&message, , sizeof(message));
message.nFileCount = nFileCount; //文件个数
message.lpFiles = pFileDesc; //文件信息
message.nRecipCount = ; //收件人个数
message.lpRecips = &recip; //收件人
message.lpszSubject = "hello"; //主题
message.lpszNoteText = "This is test"; //正文内容 //发送邮件
int nError = lpfnSendMail(, ,&message, MAPI_LOGON_UI|MAPI_DIALOG, ); if (nError != SUCCESS_SUCCESS && nError != MAPI_USER_ABORT
&& nError != MAPI_E_LOGIN_FAILURE)
{
//错误提示信息
} //不要忘了释放分配的内存
free(pFileDesc);
free(pTchPath);
FreeLibrary(hMod); return ;
}

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

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

VC++ 利用MAPI实现在程序中调用默认的电子邮件程序发送EMAIL(可以添加附件)。的更多相关文章

  1. iOS 如何在一个应用程序中调用另一个应用程序

    原则上iOS的沙箱原理,是阻止一个app去访问其他app的资源乃至是系统底层的资源的但是我们可以通过一种变相的方式:通过对应的URL模式和其他程序进行通讯. iOS应用之间的调用步骤: 一, 调用自己 ...

  2. 利用 gnuplot_i 在你的 c 程序中调用 GNUPLOT

    这是一篇非常早曾经写的小文章,最初发表于我的搜狐博客(2008-09-23 22:55).由于自从转移到这里后,sohu 博客就不再维护了,所以把这篇文章也一起挪了过来. GNUPLOT 是一款功能强 ...

  3. Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

    文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...

  4. 从C#程序中调用非受管DLLs

    从C#程序中调用非受管DLLs 文章概要: 众所周知,.NET已经渐渐成为一种技术时尚,那么C#很自然也成为一种编程时尚.如何利用浩如烟海的Win32 API以及以前所编写的 Win32 代码已经成为 ...

  5. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

  6. iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )

    在网上找到了下在记录下来以后方便用 在程序中调用系统自带的应用,比如我进入程序的时候,希望直接调用safar来打开一个网页,下面是一个简单的使用:

  7. Java程序中调用Python脚本的方法

    在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法. 1.在Eclipse中新建Maven工程: 2.pom.xml文件中添加如下依赖包之后 ...

  8. python利用or在列表解析中调用多个函数.py

    python利用or在列表解析中调用多个函数.py """ python利用or在列表解析中调用多个函数.py 2016年3月15日 05:08:42 codegay & ...

  9. 如何在程序中调用Caffe做图像分类

    Caffe是目前深度学习比较优秀好用的一个开源库,采样c++和CUDA实现,具有速度快,模型定义方便等优点.学习了几天过后,发现也有一个不方便的地方,就是在我的程序中调用Caffe做图像分类没有直接的 ...

随机推荐

  1. strcpy  复制字符串函数

    #include<stdio.h> #include<assert.h> char *strcopy(char * strDest , const char * strSrc) ...

  2. String[] 转List<String>

    String[] 转List<String> String[] idArr = ids.split(","); List<String> idList = ...

  3. Oracle中游标返回多条数据的情况

    DECLARE -- 定义类型. TYPE test_type IS TABLE OF test_main%ROWTYPE; test_data test_type; -- 定义游标. CURSOR ...

  4. CDC spyglass

    SoC中会有着几百的clock domains,millions的async data crossing. Glitch等cdc问题是netlist level simulation的主要目的. CD ...

  5. Android 屏幕滑动事件

    http://blog.csdn.net/iamfafa/article/details/6316062 Android里有两个类 android.view.GestureDetector andro ...

  6. 关于centos更新后virtualbox无法使用的问题

    http://blog.csdn.net/zgglj/article/details/50325675

  7. 常用的网络配置命令 ifconfig 所在的包

    通过rpm的数据库反查 ifconfig这个可执行文件的提供者,得出这个文件属于一个叫 net-tools 的包

  8. Sqlserver常用的时间函数---GETDATE、GETUTCDATE、DATENAME

    GETDATE 按 datetime 值的 Microsoft® SQL Server™ 标准内部格式返回当前系统日期和时间.语法GETDATE ( )返回类型datetime注释日期函数可用在 SE ...

  9. VisualSVNServer启动失败错误处理

    VisualSVNServerServer service failed to start:     服务已返回特定的服务器错误代码:(0x8007042a)     Please check Vis ...

  10. Python标准库之核心模块学习记录

    内建函数和异常 包括__builtin__模块和exceptions模块 操作系统接口模块 包括提供文件和进程处理功能的os模块,提供平台独立的文件名处理(分拆目录名,文件名,后缀等)的os.path ...