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

谁有邮件发送源代码?可否给我一份?急。。。。

楼主zbl101(星期五)2003-09-04 05:24:21 在 C/C++ / C语言 提问

rt 问题点数:100、回复次数:9Top

1 楼zbl101(星期五)回复于 2003-09-04 05:24:55 得分 0

最好是c语言版本Top

2 楼lonely001(独行客)回复于 2003-09-04 09:12:35 得分 100

C   +   SDK的,要不要?  
  要就留EMAIL:)Top

3 楼Skt32(荒城之月)回复于 2003-09-04 20:39:53 得分 0

邮件发送程序源代码   详细信息   <   Internet与WEB服务   >      
   
  使用CSocket类实现发送邮件的SMTP客户程序。  
   
  [代码性质]   VC完整应用程序代码  
  [代码作者]    
  [文件大小]   90K    
  [更新日期]   2002-3-3   20:28:00    
  [下载次数]   2967      
  http://www.vckbase.com/code/downcode.asp?id=392Top

4 楼Skt32(荒城之月)回复于 2003-09-04 20:49:41 得分 0

前言  
   
  去年年末的时候,codez   写了一个   Email   发送的小程序,叫做   ZMailer,使用的是   ZJMailer   V0.1   邮件发送引擎。公布以后,很多朋友都非常感兴趣,纷纷来信要求公布源码。很感谢这些朋友对这个小程序感兴趣。  
  本来我并不打算公布源码的(至少是短时间内),并不是我不想公开,只是由于这个程序写的时候就没有好好整理思路,也没有一个好的计划,所以开发出来的代码非常乱(因为好多东西都是随手加进去的),而且还有一些地方没有实现,真的不想拿出来献丑。但是既然这么多朋友感兴趣,那我就公布了吧。(V0.1a+   修正了   V0.1a   中不能将域名正确转换为   IP   地址的问题,基本可以正常使用了)  
   
  如果有问题或者发现了错误请一定给我写信:   webmaster@jaysoft2002.com  
   
  我会尽快更改或回复!    
   
  介绍  
   
  CZJSocket:  
  一个   SOCKET   的封装类,为什么不使用   MFC   的   CSocket   呢?因为我并不需要那么复杂的功能,而在这个类中我们提供了一些更方便的函数以供   CZJMailAgent   使用。  
   
  CZJAttachment:  
  维护一个附件文件列表,由   CZJMailAgent   使用。  
   
  CZJMessage:  
  存储邮件信息主体,并自动生成发送需要的对应格式。    
   
  CZJMailAgent:  
  ZJMailer   引擎的代理类。相当于一个   manager,它管理上述个各类并使之正常工作。  
   
  另外,CTextBuffer   用来自动管理,分配,释放所需内存。  
  CBase64Buffer   继承   CTextBuffer   并提供将该缓冲区中的字符进行   Base64   编码和解码。  
   
  过段时间,也许会重新整理一下它的源码。好了,不多说废话了,有兴趣就下载吧。  
   
  使用方法  
   
  //   The   use   way   as   follow:  
  CZJMessage   msg;  
  CZJMailAgent   mail;  
   
  //   Add   Attachement  
  msg.m_attach.AddFile(CString(_T("C:\\Autoexec.bat")));  
   
  //   Initialize   the   message   body  
  msg.SetTo(CString(_T("Destination@domain.com"));  
  msg.SetFrom(CString(_T("codez"),   _T("codez@codez.com"));  
  msg.SetSubject(CString(_T("This   is   title   subject"));  
  msg.SetBody(CString(_T("This   is   body   context."));  
   
  //   if   u   want   to   use   ESMTP   AUTH   mode,   please   add   follow   codes:  
  //   mail.SetAuthLogin(true);  
  //   mail.SetAuthLoginParam(_T("codez")   /*   User   Name   */,    
  //   _T("password")   /*   Auth   passowrd   */);  
   
  //   Send   mail  
  if   (mail.Connect(_T("smtp.domain.com")   /*   your   smtp   server   */,   25))  
  if   (mail.Hello(_T("codez")))   //   HELO   message,   anything   as   u   like  
  if   (mail.SendMail(msg))  
  {   /*   Send   Succeeded!   */   return   TRUE;}    
   
  //   Otherwise  
  {   /*   Send   Failed   */   }    
   
  下载  
   
  源码下载   http://www.jaysoft2002.com/soft/zjm_src.zip  
  Top

5 楼zbl101(星期五)回复于 2003-09-04 22:03:29 得分 0

webmaster@win32.51.net  
   
  谢谢!!Top

6 楼cnxiaohai(相声独一处(回归,为了编程,为了C,为了CSDN))回复于 2003-09-05 07:51:34 得分 0

网上很多的  
   
  你自己搜索以下吧Top

7 楼lonely001(独行客)回复于 2003-09-06 18:15:06 得分 0

呵呵,两天没上来,不知道会不会晚了。  
  楼主,不好意思了,明天一定发,但愿不会晚:)Top

8 楼lonely001(独行客)回复于 2003-09-08 16:39:21 得分 0

下面是整理后的代码:  
   
  //   Windows   Header   Files:  
  #include   <windows.h>  
  #include   <winsock2.h>  
   
  //   C   RunTime   Header   Files  
  #include   <stdio.h>  
  #include   <stdlib.h>  
  #include   <malloc.h>  
  #include   <memory.h>  
  #include   <tchar.h>  
   
  #define MAX_LOADSTRING 128  
   
  #define WZM_NOTIFY (WM_USER   +   0x20)  
  #define WZM_START_NOTIFY (WZM_NOTIFY   +   1)  
   
  #define SMTP_CONN 0x0001  
  #define SMTP_HELO 0x0002  
  #define SMTP_MAIL 0x0004  
  #define SMTP_RCPT 0x0008  
  #define SMTP_DATA 0x0010  
  #define SMTP_VRFY 0x0020  
  #define SMTP_EXPN 0x0040  
  #define SMTP_QUIT 0x0080  
   
  #define SMTP_SEND 0x0100  
  #define SMTP_AUTH 0x0200  
  #define SMTP_USER 0x0400  
  #define SMTP_PASS 0x0800  
   
  #define HSM_FAILED 0x0000  
  #define HSM_SUCCESSED 0x0001  
   
  #define GRS_INVALID_PARAM 501 //   参数格式错误  
  #define GRS_BAD_COMMAND 502 //   命令不可实现  
  #define GRS_BAD_CMDSERIAL 503 //   错误的命令序列  
  #define GRS_BAD_PARAM 504 //   命令参数不可实现  
  #define GRS_SYS_STATUSHELP 211 //   系统状态或系统帮助响应  
  #define GRS_HELP 214 //   帮助信息  
  #define GRS_SERVER_READY 220 //   <domain>   服务就绪  
  #define GRS_SERVER_CLOSED 221 //   <domain>   服务关闭传输信道  
  #define GRS_SERVER_NOTREADY 421 //   <domain>   服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)  
  #define GRS_CMD_FINISHED 250 //   要求的邮件操作完成  
  #define GRS_NOT_LOCALUSER 251 //   用户非本地,将转发向<forward-path>  
  #define GRS_EMAIL_BUSY 450 //   要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)  
  #define GRS_EMAIL_INVALID 550 //   要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)  
  #define GRS_ABORT_OR_ERROR 451 //   放弃要求的操作;处理过程中出错  
  #define GRS_USER_NOTLOCAL 551 //   用户非本地,请尝试<forward-path>  
  #define GRS_MEMORY_FEWNESS 452 //   系统存储不足,要求的操作未执行  
  #define GRS_MEMORY_OUT 552 //   过量的存储分配,要求的操作未执行  
  #define GRS_BAD_EMAIL 553 //   邮箱名不可用,要求的操作未执行(例如邮箱格式错误)  
  #define GRS_RECV_INPUT 354 //   开始邮件输入,以<CRLF>.<CRLF>结束  
  #define GRS_CMD_FAILED 554 //   操作失败  
  #define GRS_AUTH_PASS 334 //   AUTH   命令用户验证通过  
  #define GRS_AUTH_LOGINED 235 //   AUTH   命令密码验证通过  
   
  #define WM_SOCKET_NOTIFY (WM_USER   +   0x50)  
  #define WM_SOCKET_GETHOST (WM_USER   +   0x51)  
   
  LRESULT   CALLBACK Send(HWND   hDlg,UINT   uMsg,WPARAM   wParam,LPARAM   lParam);  
   
  WORD   WINAPI HandleSmtpMessage(SOCKET   Socket,LPWORD   pwStatus,LPSTR   pBuf,WORD   wSize,LPSTR   pBufSend,WORD   wSendSize);  
  WORD   WINAPI GetReturnStatus(LPSTR   pRet);  
  BOOL   WINAPI CloseSocket(SOCKET   socket);  
  int WINAPI ANSIToBase64(const   char   *szInANSI,int   nInLen,char   *szOutBase64,int   nOutLen);  
   
  int   APIENTRY   WinMain(HINSTANCE   hInstance,  
                                            HINSTANCE   hPrevInstance,  
                                            LPSTR   lpCmdLine,  
                                            int   nCmdShow)  
  {  
  DialogBox(hInstance,MAKEINTRESOURCE(IDD_SEND),NULL,(DLGPROC)Send);  
  return   0;  
  }  
  Top

9 楼lonely001(独行客)回复于 2003-09-08 16:39:51 得分 0

LRESULT   CALLBACK   Send(HWND   hDlg,  
      UINT   uMsg,  
      WPARAM   wParam,  
      LPARAM   lParam)  
  {  
  int nReturnCode   =   0;  
  TCHAR szTemporary[MAX_LOADSTRING]   =   "";  
   
  static   WORD wStatus   =   0;  
  static   HANDLE hHost   =   NULL;  
  static   BYTE byHostEntry[MAXGETHOSTSTRUCT]   =   "";  
  static   SOCKET Socket   =   INVALID_SOCKET;  
  static   SOCKADDR_IN saServerAddr   =   {0};  
   
  switch(uMsg)  
  {  
  case   WM_INITDIALOG:  
  InitDialog(hInst,hWnd,hDlg,wpPages,lParam);  
  Socket   =   INVALID_SOCKET;  
  wStatus   =   0;  
  SetTimer(hDlg,1,500,NULL);  
  SetDlgItemText(hDlg,IDC_INFO,"正在初始化数据   ...");  
  return   TRUE;  
   
  case   WM_TIMER:  
  KillTimer(hDlg,1);  
  PostMessage(hDlg,WZM_NOTIFY,0L,0L);  
  return   TRUE;  
   
  case   WZM_NOTIFY:  
  const   WORD MAJOR_VERSION_REQUIRED   =   1;  
  const   WORD MINOR_VERSION_REQUIRED   =   1;  
  WORD wVersionRequired   =   MAKEWORD(MAJOR_VERSION_REQUIRED,MINOR_VERSION_REQUIRED);  
  WSADATA wsaData   =   {0};  
   
  nReturnCode   =   WSAStartup(wVersionRequired,&wsaData);  
   
  if(nReturnCode   !=   0)  
  {  
  SetDlgItemText(hDlg,IDC_INFO,"初始化   Socket   库失败!");  
  break;  
  }  
   
  if(wsaData.wVersion   !=   wVersionRequired)  
  {  
  SetDlgItemText(hDlg,IDC_INFO,"Socket   库版本错误!");  
  WSACleanup();  
  break;  
  }  
   
  TCHAR szHost[32]   =   "";  
  lstrcpy(szHost,"smtp.21cn.com");  
   
  hHost   =   WSAAsyncGetHostByName(hDlg,  
  WM_SOCKET_GETHOST,  
  szHost,  
  (LPSTR)byHostEntry,  
  MAXGETHOSTSTRUCT);  
  if(hHost   ==   NULL)  
  {  
  SetDlgItemText(hDlg,IDC_INFO,"解析服务器地址失败!\0");  
  WSACleanup();  
  break;  
  }  
  return   TRUE;  
   
  case   WM_SOCKET_NOTIFY:  
  switch(WSAGETSELECTEVENT(lParam))  
  {  
  case   FD_CONNECT:  
  break;  
  case   FD_READ:  
  int nReadedByte   =   0;  
  BYTE byRecvBuffer[2048]   =   "";  
  TCHAR szCommand[MAX_LOADSTRING]   =   "";  
  LPSTR pszBase64   =   NULL;  
  nReadedByte   =   recv(Socket,(LPSTR)byRecvBuffer,2048,0);  
  if(nReadedByte   ==   0)break; //连接已经被关闭  
  if(nReadedByte   ==   SOCKET_ERROR)break; //出错,错误号:   nReadedByte  
  switch(wStatus)  
  {  
  case   SMTP_CONN:  
  SetDlgItemText(hDlg,IDC_INFO,"发送命令   HELO   ...\0");  
  switch(GetReturnStatus((LPSTR)byRecvBuffer))  
  {  
  case   GRS_SERVER_READY:  
  lstrcpy(szCommand,"HELO   21cn.com\r\n\0");  
  HandleSmtpMessage(Socket,&wStatus,(LPSTR)byRecvBuffer,nReadedByte,szCommand,lstrlen(szCommand));  
  break;  
  default:  
  SetDlgItemText(hDlg,IDC_INFO,(LPSTR)byRecvBuffer);  
  break;  
  }  
  break;  
  case   SMTP_HELO:  
  SetDlgItemText(hDlg,IDC_INFO,"发送命令   AUTH   LOGIN   ...\0");  
  switch(GetReturnStatus((LPSTR)byRecvBuffer))  
  {  
  case   GRS_CMD_FINISHED:  
  lstrcpy(szCommand,"AUTH   LOGIN\r\n\0");  
  HandleSmtpMessage(Socket,&wStatus,(LPSTR)byRecvBuffer,nReadedByte,szCommand,lstrlen(szCommand));  
  break;  
  default:  
  SetDlgItemText(hDlg,IDC_INFO,(LPSTR)byRecvBuffer);  
  break;  
  }  
  break;  
  case   SMTP_AUTH:  
  SetDlgItemText(hDlg,IDC_INFO,"校验用户   ...\0");  
  switch(GetReturnStatus((LPSTR)byRecvBuffer))  
  {  
  case   GRS_AUTH_PASS:  
  ZeroMemory(szCommand,MAX_LOADSTRING);  
  ANSIToBase64("lzm@edu.21cn.com",lstrlen("lzm@edu.21cn.com"),szCommand,MAX_LOADSTRING);  
  lstrcat(szCommand,"\r\n\0");  
  HandleSmtpMessage(Socket,&wStatus,(LPSTR)byRecvBuffer,nReadedByte,szCommand,lstrlen(szCommand));  
  break;  
  default:  
  SetDlgItemText(hDlg,IDC_INFO,(LPSTR)byRecvBuffer);  
  break;  
  }  
  break;  
  case   SMTP_USER:  
  SetDlgItemText(hDlg,IDC_INFO,"校验密码   ...\0");  
  switch(GetReturnStatus((LPSTR)byRecvBuffer))  
  {  
  case   GRS_AUTH_PASS:  
  ZeroMemory(szCommand,MAX_LOADSTRING);  
  ANSIToBase64("lzm",lstrlen("lzm"),szCommand,MAX_LOADSTRING);  
  lstrcat(szCommand,"\r\n\0");  
  HandleSmtpMessage(Socket,&wStatus,(LPSTR)byRecvBuffer,nReadedByte,szCommand,lstrlen(szCommand));  
  break;  
  default:  
  SetDlgItemText(hDlg,IDC_INFO,(LPSTR)byRecvBuffer);  
  break;  
  }  
  break;  
  case   SMTP_PASS:  
  SetDlgItemText(hDlg,IDC_INFO,"发送命令   MAIL   FROM   ...\0");  
  switch(GetReturnStatus((LPSTR)byRecvBuffer))  
  {  
  case   GRS_AUTH_LOGINED:  
  lstrcpy(szCommand,"MAIL   FROM:   lzm@edu.21cn.com\r\n\0");  
  HandleSmtpMessage(Socket,&wStatus,(LPSTR)byRecvBuffer,nReadedByte,szCommand,lstrlen(szCommand));  
  break;  
  default:  
  SetDlgItemText(hDlg,IDC_INFO,(LPSTR)byRecvBuffer);  
  break;  
  }  
  break;  
  case   SMTP_MAIL:  
  SetDlgItemText(hDlg,IDC_INFO,"发送命令   RCPT   TO   ...\0");  
  switch(GetReturnStatus((LPSTR)byRecvBuffer))  
  {  
  case   GRS_CMD_FINISHED:  
  lstrcpy(szCommand,"RCPT   TO:   bsmaster@21cn.com\r\n\0");  
  HandleSmtpMessage(Socket,&wStatus,(LPSTR)byRecvBuffer,nReadedByte,szCommand,lstrlen(szCommand));  
  break;  
  default:  
  SetDlgItemText(hDlg,IDC_INFO,(LPSTR)byRecvBuffer);  
  break;  
  }  
  break;  
  case   SMTP_RCPT:  
  SetDlgItemText(hDlg,IDC_INFO,"发送命令   DATA   ...\0");  
  switch(GetReturnStatus((LPSTR)byRecvBuffer))  
  {  
  case   GRS_CMD_FINISHED:  
  lstrcpy(szCommand,"DATA\r\n\0");  
  HandleSmtpMessage(Socket,&wStatus,(LPSTR)byRecvBuffer,nReadedByte,szCommand,lstrlen(szCommand));  
  break;  
  default:  
  SetDlgItemText(hDlg,IDC_INFO,(LPSTR)byRecvBuffer);  
  break;  
  }  
  break;  
  case   SMTP_DATA:  
  SetDlgItemText(hDlg,IDC_INFO,"正在发送数据   ...\0");  
  switch(GetReturnStatus((LPSTR)byRecvBuffer))  
  {  
  case   GRS_RECV_INPUT:  
  TCHAR szMail[1024   *   10];  
  ZeroMemory(szMail,1024   *   10);  
  lstrcpy(szMail,"FROM:   lzm@edu.21cn.com\r\n");  
  lstrcat(szMail,"TO:   bsmaster@21cn.com\r\n");  
  lstrcat(szMail,"Content-Type:   text/plain;charset=\"GB2312\"\r\n");  
  lstrcat(szMail,"SUBJECT:   测试\r\n");  
  wsprintf(szCommand,"Date:   %s\r\n","2003-09-08");  
  lstrcat(szMail,szCommand);  
  lstrcat(szMail,"X-Priority:   3\r\n");  
  lstrcat(szMail,"X-Mailer:   Bisheng   Science   &   Technology   Ltd.   Register\r\n");  
  lstrcat(szMail,"\r\n");  
  wsprintf(szCommand,"姓名/单位名:%s\r\n","独行客");  
  lstrcat(szMail,szCommand);  
  lstrcat(szMail,"\r\n.\r\n");  
  HandleSmtpMessage(Socket,&wStatus,(LPSTR)byRecvBuffer,nReadedByte,szMail,lstrlen(szMail));  
  break;  
  default:  
  SetDlgItemText(hDlg,IDC_INFO,(LPSTR)byRecvBuffer);  
  break;  
  }  
  break;  
  case   SMTP_SEND:  
  SetDlgItemText(hDlg,IDC_INFO,"发送命令   QUIT   ...\0");  
  switch(GetReturnStatus((LPSTR)byRecvBuffer))  
  {  
  case   GRS_CMD_FINISHED:  
  lstrcpy(szCommand,"QUIT\r\n\0");  
  HandleSmtpMessage(Socket,&wStatus,(LPSTR)byRecvBuffer,nReadedByte,szCommand,lstrlen(szCommand));  
  break;  
  default:  
  SetDlgItemText(hDlg,IDC_INFO,(LPSTR)byRecvBuffer);  
  break;  
  }  
  break;  
  case   SMTP_VRFY:  
  break;  
  case   SMTP_EXPN:  
  break;  
  case   SMTP_QUIT:  
  SetDlgItemText(hDlg,IDC_INFO,"数据发送完毕!\0");  
  HandleSmtpMessage(Socket,&wStatus,NULL,0,NULL,0);  
  break;  
  }  
  break;  
  case   FD_WRITE:  
  break;  
  case   FD_CLOSE:  
  if(Socket   !=   INVALID_SOCKET)  
  {  
  CloseSocket(Socket);  
  WSACleanup();  
  }  
  break;  
  }  
  return   TRUE;  
   
  Top

相关问题

  • 不能发送邮件(内付源代码),请帮忙查错?
  • 求:用API写的发送邮件的程序源代码,在线等待!
  • 求ASP.NET发送邮件的源代码 (调试成功立即结贴)
  • 谁有用TNMSNTP控件发送邮件的源代码?要能用(不要BCB自带的)
  • 高分急求win32简单邮件发送程序的源代码例子,不要MFC的,请高手帮忙
  • 文件发送,请帖出源代码!
  • 软件测试——发送源代码!
  • 请问谁有用SDK发送邮件的源代码,请给我一份,不胜感激。。(最好有祥细解说--小弟为菜鸟,没办法,哎~~~)
  • 急需C#源码,放出500高分,寻求C#发送邮件源代码[带参数的],具体情况如下:
  • java怎么将网页通过javamail发送到别人的邮箱,在邮件正文显示网页内容,而不是他的网页源代码

关键词

  • 邮件
  • 代码
  • 源码
  • 邮箱
  • 下载
  • definegrs
  • definesmtp
  • codez
  • czjmailagent
  • v0.1

得分解答快速导航

  • 帖主:zbl101
  • lonely001

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

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