启动默认的邮件客户端:Outlook Express或FoxMail等东东然后添加内容和附件。
ShellExecute(pMainFrm->m_hWnd,"open","mailto:@?body="+mailBody,"","", SW_SHOW);
的方式只能附加2048字节的内容,再多就不行了!
而且用这种方式不能添加附件。
哪位高手有更好的方法?
或用mailto:方式突破2048字节限制并添加附件?
在XP浏览文件的窗口里就可以实现启动Outlook Express并自动添加文件作为附件。
找了很久都没找到自己实现的方法...
ShellExecute(pMainFrm->m_hWnd,"open","mailto:@?body="+mailBody,"","", SW_SHOW);
的方式只能附加2048字节的内容,再多就不行了!
而且用这种方式不能添加附件。
哪位高手有更好的方法?
或用mailto:方式突破2048字节限制并添加附件?
在XP浏览文件的窗口里就可以实现启动Outlook Express并自动添加文件作为附件。
找了很久都没找到自己实现的方法...
同时得把内容加上,加到正文或附件里都行。不仅仅是调用Outlook的接口就行,得启动默认的邮件客户端!!!效果类似Windows XP系统里选择一个文件,左边就会有“以电子邮件形式发送此文件”的链接,点击链接后出现Outlook新邮件界面,并把选择的文件作为附件加上。高手救急阿~~~~
http://hubdog.csdn.net/Hubdog/outlook.htm
http://www.vckbase.net/document/viewdoc/?id=712
不过都不太符合,需要启动默认的邮件客户端,用MAPI或JMail可以做到吗?
资源管理器里选择一个文件右击->发送到->邮件接收者 的功能.
编程如何实现阿~Thanks.
1、沿用ShellExecute(pMainFrm->m_hWnd,"open","mailto:@?body="+mailBody,"","", SW_SHOW);
之后捕获到outlook窗体,发消息继续加入字符串,加附件考虑自动化技术2、直接编代码实现发邮件及附件
第二个不符合客户需求。我在国外论坛上找到一个方法,自己创建临时.eml文件然后用ShellExecute打开即可。算是临时解决了吧。
但是默认只能是outlook express打开。寻求更好的办法....
HMODULE hMod = LoadLibrary("MAPI32.DLL"); if (hMod == NULL) //加载动态库失败
{
AfxMessageBox(AFX_IDP_FAILED_MAPI_LOAD);
return -1;
} //获取发送邮件的函数地址
ULONG (PASCAL *lpfnSendMail)(ULONG, ULONG, MapiMessage*, FLAGS, ULONG);
(FARPROC&)lpfnSendMail = GetProcAddress(hMod, "MAPISendMail"); if (lpfnSendMail == NULL)
{
AfxMessageBox(AFX_IDP_INVALID_MAPI_DLL);
return -1;
} int nFileCount = nCount; //有多少个附件需要发送 //分配内存保存附件信息 不能使用静态数组,因为不知道要发送附件的个数
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;
strcpy(p,file[i]); (pFileDesc + i)->nPosition = (ULONG)-1;
(pFileDesc + i)->lpszPathName = p;
(pFileDesc + i)->lpszFileName = p;
} //收件人结构信息
MapiRecipDesc recip;
memset(&recip,0,sizeof(MapiRecipDesc));
char caddress[1024];
memset(caddress,0,1024);
strcpy(caddress,add);
CString straddresslist;
straddresslist=caddress; recip.lpszAddress =caddress;
recip.ulRecipClass = MAPI_TO;
// if (straddresslist.IsEmpty())
// recip.lpszName= "no empty";
//邮件结构信息
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);