免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2032 | 回复: 1
打印 上一主题 下一主题

socket编写smtp客户端问题,困扰我很久! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-22 11:34 |只看该作者 |倒序浏览
  1. #include <iostream>;
  2. #include <string>;
  3. #include <sys/socket.h>;
  4. #include <netdb.h>;
  5. #include <errno.h>;
  6. #include <unistd.h>;

  7. using namespace std;
  8. const int PORT = 25;
  9. int main(void)
  10. {
  11.        
  12.         int sockfd;
  13.         struct sockaddr_in mail_serv_addr;
  14.         struct sockaddr_in mail_clit_addr;
  15.         struct hostent *ser_name;
  16.         char cmd_str[512];
  17.         char server_msg[512];
  18.         memset(&cmd_str,'\0',512);
  19.         memset(&server_msg,'\0',512);

  20.         ser_name = gethostbyname("localhost");
  21.        
  22.         /*建立socket连接*/
  23.         if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
  24.         {
  25.                 fprintf(stderr,"socket error: %s",strerror(errno));
  26.                 exit(1);
  27.         }

  28.         /*客户端填充内容*/
  29.         memset(&mail_serv_addr,'\0',sizeof(struct sockaddr_in));
  30.         mail_serv_addr.sin_family = AF_INET;
  31.         mail_serv_addr.sin_port = htons(PORT);
  32.         mail_serv_addr.sin_addr = *((struct in_addr *)ser_name->;h_addr);
  33.        
  34.         /*连接邮件服务器*/
  35.         if (connect(sockfd,(struct sockaddr *)&mail_serv_addr,sizeof(struct sockaddr)) < 0)
  36.         {
  37.                 fprintf(stderr,"connect error: %s\n",strerror(errno));
  38.                 exit(1);
  39.         }

  40.         /*连接成功*/
  41.         memset(server_msg,0,512);
  42.         memset(cmd_str,0,512);
  43.         if (read(sockfd,server_msg,512) < 0)
  44.         {
  45.                 fprintf(stderr,"read error!\n");
  46.                 exit(1);
  47.         }
  48.         if (strstr(server_msg,"220") == NULL)
  49.         {
  50.                 fprintf(stderr,"error: %s",server_msg);
  51.                 exit(1);
  52.         }
  53.         else
  54.         {
  55.                 memset(server_msg,0,512);
  56.                 memset(cmd_str,0,512);
  57.                 sprintf(cmd_str,"HELO localhost\r\n");
  58.                 if (write(sockfd,cmd_str,512) < 0)
  59.                 {
  60.                         fprintf(stderr,"write error!\n");
  61.                         exit(1);
  62.                 }
  63.                 if (read(sockfd,server_msg,512) <0)
  64.                 {
  65.                         fprintf(stderr,"read error!\n");
  66.                         exit(1);
  67.                 }
  68.                 if (strstr(server_msg,"250") == NULL)
  69.                 {
  70.                         fprintf(stderr,"error: %s\n",server_msg);
  71.                         exit(1);       
  72.                 }
  73.                 else
  74.                 {
  75.                         memset(server_msg,0,512);
  76.                         memset(cmd_str,0,512);
  77.                         sprintf(cmd_str,"mail from: kofwang@sina.com\r\n");
  78.                         if (write(sockfd,cmd_str,strlen(cmd_str)) < 0)
  79.                         {
  80.                                 fprintf(stderr,"write error: %s\n",strerror(errno));
  81.                                 exit(1);
  82.                         }
  83.                         if (read(sockfd,server_msg,512) < 0)
  84.                         {
  85.                                 fprintf(stderr,"read error: %s\n",strerror(errno));
  86.                                 exit(1);
  87.                         }
  88.                         if (strstr(server_msg,"250") == NULL)
  89.                         {
  90.                                 fprintf(stderr,"error: %s\n",server_msg);
  91.                                 exit(1);
  92.                         }
  93.                         else
  94.                         {
  95.                                 memset(server_msg,0,512);
  96.                                 memset(cmd_str,0,512);
  97.                                 sprintf(cmd_str,"rcpt to: kofwang@hotmail.com\r\n");
  98.                                 if (write(sockfd,cmd_str,512) < 0)
  99.                                 {
  100.                                         fprintf(stderr,"write error: %s\n",strerror(errno));
  101.                                         exit(1);
  102.                                 }
  103.                                 if (read(sockfd,server_msg,512) < 0)
  104.                                 {
  105.                                         fprintf(stderr,"read error: %s\n",strerror(errno));
  106.                                         exit(1);
  107.                                 }
  108.                                 if (strstr(server_msg,"250") == NULL)
  109.                                 {
  110.                                         fprintf(stderr,"error: %s\n",server_msg);
  111.                                         exit(1);
  112.                                 }
  113.                                 else
  114.                                 {
  115.                                         memset(server_msg,'\0',512);
  116.                                         memset(cmd_str,'\0',512);
  117.                                         sprintf(cmd_str,"data\r\n");
  118.                                         if (write(sockfd,cmd_str,512) < 0)
  119.                                         {
  120.                                                 fprintf(stderr,"write error: %s\n",strerror(errno));
  121.                                                 exit(1);
  122.                                         }
  123.                                         if (read(sockfd,server_msg,512) < 0)
  124.                                         {
  125.                                                 fprintf(stderr,"read error: %s\n",strerror(errno));
  126.                                                 exit(1);
  127.                                         }
  128.                                         if (strstr(server_msg,"354") == NULL)
  129.                                         {
  130.                                                 fprintf(stderr,"error: %s\n",server_msg);
  131.                                                 exit(1);
  132.                                         }
  133.                                         else
  134.                                         {
  135.                                                 cout<<"success!"<<endl;
  136.                                                 return 1;

  137.                                         /*书写邮件*/
  138.                                         }
  139.                                 }
  140.                         }
  141.                 }
  142.         }
  143. }
  144.                                
复制代码


将“mail from: kofwang@sina.com"发送到服务端后,服务端返回错误,大致意思是无法识别的命令:"",我分析是之前发送了一个回车给服务端,可是我找不到回车出自哪里啊?大家帮我分析分析!谢谢!

论坛徽章:
0
2 [报告]
发表于 2004-08-22 23:41 |只看该作者

socket编写smtp客户端问题,困扰我很久!

我不知道你有没有认真的研究smtp协议, 而且不知道到你要连接的是邮件发送服务器还是邮件接受服务器!这个过程一般是根据不同的情况又不同的处理, 而且一般情况下首先会有一个认证的过程!我建议你先telnet尝试做一个真正的实用过程, 然后在根据你的情况写程序!
同时你的这个程序还有很多的地方需要改进, 比如if嵌套太多了,可以尝试使用select函数!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP