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

各位,有谁知道SMTP发送附件的命令

楼主aixiaobai(xiaobai)2002-07-25 17:43:38 在 VC/MFC / 基础类 提问

近来我正在看一些SMTP的资料,  
  但是发现如果直接用telnet连接  
  SMTP服务器发信时没有办法发送附件,  
  有没有什么命令可以发送附件啊?  
  例如象mail   from;rcpt   to;等等。  
  急啊,呵呵。 问题点数:100、回复次数:4Top

1 楼batizhou(batizhou)回复于 2002-07-25 17:57:49 得分 10

没有这些命令,所有的消息包括正文和附件是一次性发送的。中间用Bounder分开。  
  具体请参考RFC-821,RFC-1341  
  有本书讲的也可以《Internet   Email编程》  
  Top

2 楼aixiaobai(xiaobai)回复于 2002-07-25 18:11:17 得分 0

那我想发送附件,  
  有没有什么办法吗,  
  我很不想用MAPI来做,  
  太大了,  
  我只是想做成一个可以在  
  命令行方式下的工具Top

3 楼xuying()回复于 2002-07-25 18:17:50 得分 90

/*************************************************************  
    *     smtp.cpp   -   Use   SMTP   to   send   an   eMail   with   an   Attachment   and   verify     *  
    *     Copyright   (C)   2001-2002   by   ShadowStar.                                                                                     *  
    *     Use   and   modify   freely.                                                                                                                                             *  
    *     http://shadowstar.126.com/                                                                                                                               *  
    *************************************************************  
    */  
  //---------------------------------------------------------------------------  
   
  #include   <winsock2.h>  
  #include   <string.h>  
  #include   <stdio.h>  
   
  const   int     BASE64_MAXLINE   =   76;  
  const   char   EOL[]   =   "\r\n";  
  const   char   BASE64_TAB[]   =   "ABCDEFGHIJKLMNOPQRSTUVWXYZ"  
              "abcdefghijklmnopqrstuvwxyz0123456789+/";  
  const   char   HEADER[]   =  
      "HELO   support.com\r\n"  
      //"AUTH   LOGIN\r\n"   //+   BASE64   USER   +   BASE64   PASS  
      "MAIL   FROM:   chinansl@support.com\r\n"  
      "RCPT   TO:   shadowstar@support.com\r\n"  
      "DATA\r\n"  
      "FROM:   chinansl@support.com\r\n"  
      "TO:   shadowstar@support.com\r\n"  
      "SUBJECT:   this   is   a   test\r\n"  
      "Date:   2002-5-14\r\n"  
      "X-Mailer:   shadowstar's   mailer\r\n"  
      "MIME-Version:   1.0\r\n"  
      "Content-type:   multipart/mixed;   boundary=\"#BOUNDARY#\"\r\n"  
      //"Content-Type:   text/plain;   charset=gb2312\r\n"  
      "\r\n";  
  const   char   CONTENT[]   =  
      "\r\n--#BOUNDARY#\r\n"  
      "Content-Type:   text/plain;   charset=gb2312\r\n"  
      "Content-Transfer-Encoding:   quoted-printable\r\n"  
      "\r\n"  
      "/*************************************************************"  
      "   *     smtp.cpp   -   Use   SMTP   to   send   an   eMail   with   an   Attachment   and   verify     *"  
      "   *     Copyright   (C)   2001-2002   by   ShadowStar.                                                                                     *"  
      "   *     Use   and   modify   freely.                                                                                                                                             *"  
      "   *     http://shadowstar.126.com/                                                                                                                               *"  
      "   *************************************************************"  
      "   */\r\n"  
      "\r\n";  
  const   char   ATT_HEADER[]   =  
      "\r\n--#BOUNDARY#\r\n"  
      "Content-Type:   application/octet-stream;   name=smtp.exe\r\n"  
      "Content-Disposition:   attachment;   filename=smtp.exe\r\n"  
      "Content-Transfer-Encoding:   base64\r\n"  
      "\r\n";  
   
  //---------------------------------------------------------------------------  
  int   ANSIToBase64(const   char   *szInANSI,   int   nInLen,   char   *szOutBase64,   int   nOutLen);  
   
  int   main(int   argc,   char*   argv[])  
  {  
    WSADATA   wsaData;  
    int     SockFD;  
    struct   sockaddr_in   ServAddr;  
    char     buf[0x100];  
    int           x;  
    FILE         *fp;  
    char         *aatt   =   new   char[0x400000];  
    char   *batt   =   new   char[0x555556];  
   
    WSAStartup(MAKEWORD(2,2),   &wsaData);  
   
    LPHOSTENT   pHost   =   gethostbyname("172.16.234.111");  
    SockFD   =   socket(AF_INET,   SOCK_STREAM,   IPPROTO_TCP);  
    ServAddr.sin_family   =   AF_INET;  
    ServAddr.sin_addr.s_addr   =   *(ULONG   *)pHost->h_addr_list[0];  
    ServAddr.sin_port   =   htons(25);  
   
    connect(SockFD,   (struct   sockaddr   *)&ServAddr,   sizeof(ServAddr));  
    //send   HEADER  
    send(SockFD,   HEADER,   strlen(HEADER),   0);  
    //send   CONTENT  
    send(SockFD,   CONTENT,   strlen(CONTENT),   0);  
    //send   ATT_HEADER  
    send(SockFD,   ATT_HEADER,   strlen(ATT_HEADER),   0);  
    //read   attachment  
    fp   =   fopen(argv[0],   "rb");  
    fseek(fp,   0,   2);  
    x   =   ftell(fp);  
    if   (x   >   0x400000)  
      x   =   0;  
    rewind(fp);  
    fread(aatt,   x,   1,   fp);  
    fclose(fp);  
    x   =   ANSIToBase64(aatt,   x,   batt,   0x555556);  
    //send   base64   attachment  
    send(SockFD,   batt,   x,   0);  
   
    send(SockFD,   ".\r\n",   strlen(".\r\n"),   0);       //end  
    send(SockFD,   "QUIT\r\n",   strlen("QUIT\r\n"),   0);   //quit  
   
    closesocket(SockFD);  
    WSACleanup();  
   
    delete   []aatt;  
    delete   []batt;  
    return   0;  
  }  
  //---------------------------------------------------------------------------  
  int   ANSIToBase64(const   char   *szInANSI,   int   nInLen,   char   *szOutBase64,   int   nOutLen)  
  {  
    //Input   Parameter   validation  
    if   ((szInANSI   ==   NULL)   ||   (nInLen   ==   0)   ||   (szOutBase64   ==   NULL)   ||   (nOutLen   ==   0))  
      return   0;  
    if   (nOutLen   <   (nInLen*4/3   +   1   +   nInLen*4/3/BASE64_MAXLINE*2   +   1   +   4))  
      return   0;  
   
    //Set   up   the   parameters   prior   to   the   main   encoding   loop  
    int   nInPos     =   0;  
    int   nOutPos   =   0;  
    int   nLineLen   =   0;  
    int   c1,   c2,   c3;  
    int   i;  
   
    //   Get   three   characters   at   a   time   from   the   input   buffer   and   encode   them  
    for   (i=0;   i<nInLen/3;   ++i)  
    {  
      //Get   the   next   2   characters  
      c1   =   szInANSI[nInPos++]   &   0xFF;  
      c2   =   szInANSI[nInPos++]   &   0xFF;  
      c3   =   szInANSI[nInPos++]   &   0xFF;  
   
      //Encode   into   the   4   6   bit   characters  
      szOutBase64[nOutPos++]   =   BASE64_TAB[c1   >>   2];  
      szOutBase64[nOutPos++]   =   BASE64_TAB[((c1   <<   4)   |   (c2   >>   4))   &   0x3F];  
      szOutBase64[nOutPos++]   =   BASE64_TAB[((c2   <<   2)   |   (c3   >>   6))   &   0x3F];  
      szOutBase64[nOutPos++]   =   BASE64_TAB[c3   &   0x3F];  
      nLineLen   +=   4;  
   
      //Handle   the   case   where   we   have   gone   over   the   max   line   boundary  
      if   (nLineLen   >   BASE64_MAXLINE   -   4)  
      {  
        szOutBase64[nOutPos++]   =   EOL[0];  
        szOutBase64[nOutPos++]   =   EOL[1];  
        nLineLen   =   0;  
      }  
    }  
   
    //   Encode   the   remaining   one   or   two   characters   in   the   input   buffer  
    switch   (nInLen   %   3)  
    {  
      case   0:  
      {  
        szOutBase64[nOutPos++]   =   EOL[0];  
        szOutBase64[nOutPos++]   =   EOL[1];  
        break;  
      }  
      case   1:  
      {  
        c1   =   szInANSI[nInPos]   &   0xFF;  
        szOutBase64[nOutPos++]   =   BASE64_TAB[(c1   &   0xFC)   >>   2];  
        szOutBase64[nOutPos++]   =   BASE64_TAB[((c1   &   0x03)   <<   4)];  
        szOutBase64[nOutPos++]   =   '=';  
        szOutBase64[nOutPos++]   =   '=';  
        szOutBase64[nOutPos++]   =   EOL[0];  
        szOutBase64[nOutPos++]   =   EOL[1];  
        break;  
      }  
      case   2:  
      {  
        c1   =   szInANSI[nInPos++]   &   0xFF;  
        c2   =   szInANSI[nInPos]   &   0xFF;  
        szOutBase64[nOutPos++]   =   BASE64_TAB[(c1   &   0xFC)   >>   2];  
        szOutBase64[nOutPos++]   =   BASE64_TAB[((c1   &   0x03)   <<   4)   |   ((c2   &   0xF0)   >>   4)];  
        szOutBase64[nOutPos++]   =   BASE64_TAB[((c2   &   0x0F)   <<   2)];  
        szOutBase64[nOutPos++]   =   '=';  
        szOutBase64[nOutPos++]   =   EOL[0];  
        szOutBase64[nOutPos++]   =   EOL[1];  
        break;  
      }  
      default:  
      {  
        return   0;  
      }  
    }  
   
    szOutBase64[nOutPos]   =   0;  
   
    return   nOutPos;  
  }  
  Top

4 楼georgehuang()回复于 2002-07-25 18:19:01 得分 0

什么意思啊,是用MFC实现吗,如果是,我这里有个程序,留下EMAIL吧Top

相关问题

  • 谁知道SMTP 用什么命令来添加附件??
  • 用SMTP怎么发送附件
  • 添加附件的命令?
  • 发送附件
  • 带身份验证的SMTP(如smtp.sina.com.cn)发送附件
  • asp发送附件?
  • 请问哪儿有发送带附件的smtp邮件组件(非cdonts.dll)?谢谢
  • 在 NT4.0 + IIS4.0 下SMTP启动,WEB方式发送普通邮件成功。可怎么发送附件呢?
  • 我向263的smtp服务器发送SMTP命令,但是它要我验证,要怎么发?
  • 发送附件的问题

关键词

  • noutpos
  • szoutbase
  • shadowstar
  • x3f
  • nlinelen
  • smtp
  • 命令
  • eol
  • 发送附件
  • boundary

得分解答快速导航

  • 帖主:aixiaobai
  • batizhou
  • xuying

相关链接

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

广告也精彩

反馈

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