CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

请问 如何发送电子邮件?

楼主zzg315(依然)2005-10-19 11:05:43 在 VC/MFC / 网络编程 提问

小弟想做一个发送电子邮件的小程序,且SMTP服务器需要身份验证。现不知怎么做,  
   
      请各位大哥指教阿! 问题点数:50、回复次数:2Top

1 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2005-10-19 12:07:19 得分 50

网上接了个!!!!呵呵  
   
   
  //加载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);Top

2 楼zzg315(依然)回复于 2005-10-19 20:02:01 得分 0

hehe,谢谢这位大哥阿!  
  我的程序的要求比你说的要简单的多,只要实现发送文本邮件,不需要带附件,而且不需要抄送等功能。  
  谢谢你啦!Top

相关问题

  • 如何编程发送电子邮件
  • 如何用SMTP发送电子邮件
  • 如何发送电子邮件?
  • 请教如何用Delphi实现CGI发送电子邮件?
  • vb如何自动发送电子邮件?
  • 如何在web页面发送电子邮件?
  • 电子邮件附件该如何上传发送呢?
  • 请问如何不使用OutLook发送电子邮件?
  • 如何将表单信息发送电子邮件
  • 如何利用VB SCRIPT实现隐性发送电子邮件

关键词

  • 邮件
  • 文件
  • 信息
  • dll
  • null
  • nfilecount
  • mapi
  • pfiledesc
  • lpfnsendmail
  • mapifiledesc

得分解答快速导航

  • 帖主:zzg315
  • rageliu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo