利用Socket 编写SMTP 发送邮件程序

本文介绍了一个使用C++实现的SMTP邮件发送程序示例,详细展示了从连接SMTP服务器到完成邮件发送的具体步骤,包括认证登录、指定发件人及收件人等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  print ?
  1. #include <winsock.h>   
  2. #include <stdio.h>   
  3. #include <string>   
  4. #include <iostream>   
  5. using namespace std;  
  6. #define WSWENS MAKEWORD(2,0)   
  7. int main()  
  8. {  
  9.     sockaddr_in sin;  
  10.     WSADATA wsadata;  
  11.     if(WSAStartup(WSWENS, &wsadata) !=0)  
  12.         cout<<"startup failed"<<endl;  
  13.       
  14.     SOCKET s = socket(PF_INET,SOCK_STREAM,0);  
  15.     memset(&sin, 0, sizeof(sin));  
  16.     sin.sin_family = AF_INET;  
  17.     sin.sin_port = htons(25);  
  18.     hostent* hptr = gethostbyname("smtp.sina.com");  
  19.     memcpy(&sin.sin_addr.S_un.S_addr, hptr->h_addr_list[0], hptr->h_length);  
  20.     printf("IP of smpt.sina.com is : %d:%d:%d:%d",  
  21.         sin.sin_addr.S_un.S_un_b.s_b1,  
  22.         sin.sin_addr.S_un.S_un_b.s_b2,  
  23.         sin.sin_addr.S_un.S_un_b.s_b3,  
  24.         sin.sin_addr.S_un.S_un_b.s_b4);  
  25.       
  26.     cout << endl;  
  27.     if(connect(s, (sockaddr*)&sin, sizeof(sin)))  
  28.     {  
  29.         cout << "connect failed" << endl;  
  30.         exit(0);  
  31.     }  
  32.     else  
  33.     {  
  34.         cout << "connect success" << endl;  
  35.     }  
  36.       
  37.     char bufferresv[10240];  
  38.     int len = recv(s, bufferresv, 10240, 0);  
  39.     bufferresv[len]=0;  
  40.     printf("%s",bufferresv);  
  41.     cout << endl;  
  42.     // send "helo ehlo"   
  43.     char bufferHello[] = "helo ehlo/r/n";  
  44.     cout << "helo ehlo..." << endl;  
  45.     send(s, bufferHello, strlen(bufferHello), 0);  
  46.     len = recv(s, bufferresv, 10240, 0);  
  47.     bufferresv[len]=0;  
  48.     printf("%s",bufferresv);  
  49.     cout << endl;  
  50.     // send "auth login"   
  51.     char bufferLogin[] = "auth login/r/n";  
  52.     cout << "auth login..." << endl;  
  53.     send(s, bufferLogin, strlen(bufferLogin),0);  
  54.     len = recv(s, bufferresv, 10240, 0);  
  55.       
  56.     bufferresv[len]=0;  
  57.     printf("%s",bufferresv);  
  58.       
  59.     cout << endl;  
  60.     // send "username" send "psw"   
  61.     char bufferUserName[] = "c3VubnlrYWhv/r/n";  
  62.     char bufferpsw[] = "MjAwNzE2MTA0MDk=/r/n";  
  63.       
  64.     cout << "input username...." << endl;  
  65.     send(s,bufferUserName,strlen(bufferUserName),0);  
  66.     len = recv(s, bufferresv, 10240, 0);  
  67.     bufferresv[len]=0;  
  68.     printf("%s",bufferresv);  
  69.     cout << endl;  
  70.     cout << "input password..." << endl;  
  71.     send(s,bufferpsw,strlen(bufferpsw),0);  
  72.     len = recv(s, bufferresv, 10240, 0);  
  73.     bufferresv[len]=0;  
  74.     printf("%s",bufferresv);  
  75.     cout << endl;  
  76.     // mail from:<sunnykaho@sina.com>   
  77.     char bufferMailFrom[] = "mail from:<sunnykaho@sina.com>/r/n";  
  78.     cout << "mail from:<sunnykaho@sina.com>..." << endl;  
  79.     send(s, bufferMailFrom, strlen(bufferMailFrom), 0);  
  80.     len = recv(s, bufferresv, 10240, 0);  
  81.     bufferresv[len]=0;  
  82.     printf("%s",bufferresv);  
  83.     cout << endl;  
  84.     // rcpt to:<kaholi@qq.com>   
  85.     char bufferRcptTo[] = "rcpt to:<kaholi@qq.com>/r/n";  
  86.     cout << "rcpt to:<kaholi@qq.com>..." << endl;  
  87.     send(s, bufferRcptTo, strlen(bufferRcptTo), 0);  
  88.     len = recv(s, bufferresv, 10240, 0);  
  89.     bufferresv[len]=0;  
  90.     printf("%s",bufferresv);  
  91.     cout << endl;  
  92.       
  93.     // data   
  94.     char bufferData[] = "data/r/n";  
  95.     cout << "data..." << endl;  
  96.     send(s, bufferData,strlen(bufferData), 0);  
  97.     len = recv(s, bufferresv, 10240, 0);  
  98.     bufferresv[len]=0;  
  99.     printf("%s",bufferresv);  
  100.     cout << endl;  
  101.     //    
  102.     char bufferTo[] = "to:kaholi@qq.com/r/n";  
  103.     char bufferFrom[] = "from:sunnykaho@sina.com/r/n";  
  104.     cout << "to:kaholi@qq.com... " << endl;  
  105.     send(s, bufferTo, strlen(bufferTo),0);  
  106.     cout << "from:sunnykaho@sina.com..." << endl;  
  107.     send(s, bufferFrom, strlen(bufferFrom), 0);  
  108.       
  109.     char bufferSubject[] = "subject:hello from kaho/r/n";  
  110.     cout << "subject:hello from kaho..." << endl;  
  111.     send(s, bufferSubject, strlen(bufferSubject), 0);  
  112.     char bufferPoint[] = "./r/n";  
  113.     send(s, bufferPoint, strlen(bufferPoint), 0);  
  114.     len = recv(s, bufferresv, 10240, 0);  
  115.     bufferresv[len]=0;  
  116.     printf("%s",bufferresv);  
  117.     cout << endl;  
  118. }  
 

 

以上代码感谢超哥像春哥般的光环照耀下做出来的...

 

如果想引用博客内容,请在明显的地方注释清楚转帖并且包含我们原帖的地址引用,谢谢,如果有任何问题,可以在日志下面留言。我尽力解答。

原文网址:http://blog.youkuaiyun.com/sunnykaho/archive/2009/12/02/4927178.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值