东陆风华BBS

 找回密码
 注册东陆风华通行证
东陆风华论坛18周年庆(2005.3.28-2023.3.28)东陆风华-云南大学各专业历年考研复试信息汇总帖送人玫瑰手留余香-云南大学历年考研复试信息汇总
东陆风华-云南大学各学院考研QQ群号码
申请东陆风华实名认证免费领取云大考研考博真题如何申请云南大学考研论坛VIP会员?VIP特权?
东陆风华-云南大学各省校友&云南省各地州校友QQ群云南大学呈贡校区图片 &宿舍图片&图片云大 东陆风华送人玫瑰手留余香-云南大学2021年考研复试信息分享
返回列表 发新帖
查看: 2228|回复: 7

贴个C写的邮件发送程序吧。。。。

[复制链接]

该用户从未签到

发表于 2006-9-12 09:04:07 | 显示全部楼层 |阅读模式

东陆风华帐号全站通用,包括论坛、商城、网络家园等站点,登陆查看更精彩内容

您需要 登录 才可以下载或查看,没有帐号?注册东陆风华通行证

x
放假的时候写的。。。。呵呵。。。。
参考资料:《HowTo.SMTP》,《SendMail》(NextFly写的),《MSDN 2005》
好了,废话就不说了。下面是源代码:


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <winsock2.h>
  4. #pragma comment(lib, "ws2_32.lib")
  5. const char *MailData = "From: "88250"<dl88250@126.com>\r\n"
  6.                         "Subject: This is only a test mail! ^^\r\n.\r\n";
  7. int main(int argc, char *argv[])
  8. {
  9.    
  10.     WSADATA wsaData;
  11.         WORD wVersionRequested = MAKEWORD(2, 2);
  12.     struct hostent *pHostent = NULL;
  13.     SOCKET server = INVALID_SOCKET;
  14.     struct sockaddr_in service;
  15.     int retConnect = 0;
  16.     char Buffer[1024] = {0};
  17.      
  18.         if(WSAStartup(wVersionRequested, &wsaData) != 0){
  19.                 printf("Error at WSAStartup()\n");
  20.                 goto WSACleanup;
  21.     }
  22.      
  23.     server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);        //Create a Socket

  24.     if(server == INVALID_SOCKET){
  25.                 printf("Error at socket(): %ld\n", WSAGetLastError());
  26.         goto WSACleanup;
  27.     }
  28.      
  29.     pHostent = gethostbyname("smtp.126.com");              //Get the Mail Server Name
  30.     if(pHostent == NULL){
  31.                 printf("The Host Name is Invalid...\n");
  32.         goto WSACleanup;
  33.     }
  34.      
  35.     service.sin_family = AF_INET;
  36.     memcpy(&service.sin_addr.s_addr, pHostent->h_addr_list[0], pHostent->h_length);
  37.     service.sin_port = htons(25);

  38.     //Connect to the remote Mail Server
  39.     retConnect = connect(server, (struct sockaddr*)&service, sizeof(service));
  40.     if(retConnect == SOCKET_ERROR){
  41.                 printf("Failed to connect.\n");
  42.         goto WSACleanup;
  43.     }
  44.      
  45.     printf("Connect to %s....\n", inet_ntoa(service.sin_addr));
  46.      
  47.     //Receive Data From the Mail Server
  48.         ZeroMemory(Buffer, sizeof(Buffer));
  49.     retConnect = recv(server, Buffer, sizeof(Buffer), 0);
  50.     if(retConnect == SOCKET_ERROR){
  51.                 printf("Failed to connect.\n");     
  52.         goto WSACleanup;      
  53.     }else{
  54.         printf("%s\n", Buffer);
  55.     }
  56.      
  57.     //Send "HELO Server....\r\n" to the Mail Server
  58.     retConnect = send(server, "HELO Server....\r\n", strlen("HELO Server....\r\n"), 0);
  59.     if(retConnect == SOCKET_ERROR){
  60.                 printf("Send HELO to the Mail Failure.\n");
  61.         goto WSACleanup;
  62.     }else{
  63.            printf("HELO Server....\n");   
  64.     }   
  65.      
  66.     //Receive Data From the Mail Server
  67.     ZeroMemory(Buffer, sizeof(Buffer));
  68.     retConnect = recv(server, Buffer, sizeof(Buffer), 0);
  69.     if(retConnect == SOCKET_ERROR){
  70.                 printf("Failed to connect.\n");     
  71.         goto WSACleanup;      
  72.     }else{
  73.         printf("%s\n", Buffer);
  74.     }

  75.     //Send "AUTH LOGIN\r\n" to the Mail Server
  76.     retConnect = send(server, "AUTH LOGIN\r\n", strlen("AUTH LOGIN\r\n"), 0);
  77.     if(retConnect == SOCKET_ERROR){
  78.                 printf("Send "AUTH LOGIN" to Mail Failure.\n");
  79.         goto WSACleanup;
  80.     }else{
  81.                 printf("AUTH LOGIN\n");   
  82.     }      

  83.     //Receive Data From the Mail Server
  84.     ZeroMemory(Buffer, sizeof(Buffer));
  85.     retConnect = recv(server, Buffer, sizeof(Buffer), 0);
  86.     if(retConnect == SOCKET_ERROR){
  87.                 printf("Receive Data From Mail Server Failure.\n");     
  88.         goto WSACleanup;      
  89.     }else{  
  90.                 printf("%s\n", Buffer);
  91.     }
  92.    
  93.     //Send UserName to the Mail Server. The UserName is Encoded by Base64.
  94.     retConnect = send(server, "bGJleW9uZDRrb21h==\r\n", strlen("bGJleW9uZDRrb21h==\r\n"), 0);
  95.     if(retConnect == SOCKET_ERROR){
  96.                 printf("Send UserName to the Mail Failure.\n");
  97.         goto WSACleanup;
  98.     }else{
  99.                 printf("UserName\n");   
  100.     }      
  101.          
  102.     //Receive Data From the Mail Server
  103.     ZeroMemory(Buffer, sizeof(Buffer));
  104.     retConnect = recv(server, Buffer, sizeof(Buffer), 0);
  105.     if(retConnect == SOCKET_ERROR){
  106.                 printf("Receive Data From the Mail Server Failure.\n");     
  107.         goto WSACleanup;      
  108.     }else{
  109.         printf("%s\n", Buffer);
  110.     }

  111.     //Send Password to the Mail Server The Password is Encoded by Base64.
  112.     retConnect = send(server, "bGJleW9uZDRrb21h=\r\n", strlen("bGJleW9uZDRrb21h=\r\n"), 0);
  113.     if(retConnect == SOCKET_ERROR){
  114.                 printf("Send Password to Mail Failure.\n");
  115.         goto WSACleanup;
  116.     }else{
  117.                 printf("Password\n");   
  118.     }   
  119.      
  120.     //Receive Data From the Mail Server
  121.     ZeroMemory(Buffer, sizeof(Buffer));
  122.     retConnect = recv(server, Buffer, sizeof(Buffer), 0);
  123.     if(retConnect == SOCKET_ERROR){
  124.                 printf("Receive Data From the Mail Server Failure.\n");     
  125.         goto WSACleanup;      
  126.     }else{
  127.         printf("%s\n", Buffer);
  128.     }

  129.     //Send "Mail From: " File to the Mail Server, sender's Mail Address
  130.     retConnect = send(server, "MAIL FROM: <lbeyond4koma@126.com>\r\n", strlen("MAIL FROM: <lbeyond4koma@126.com>\r\n"), 0);
  131.     if(retConnect == SOCKET_ERROR){
  132.                 printf("Send "Mail From: " to Mail Failure.\n");
  133.         goto WSACleanup;
  134.     }else{
  135.                 printf("MAIL FROM: <lbeyond4koma@126.com>\n");   
  136.     }   
  137.      
  138.     //Receive Data From the Mail Server
  139.     ZeroMemory(Buffer, sizeof(Buffer));
  140.     retConnect = recv(server, Buffer, sizeof(Buffer), 0);
  141.     if(retConnect == SOCKET_ERROR){
  142.                 printf("Receive Data From Mail Server Failure.\n");     
  143.         goto WSACleanup;      
  144.     }else{
  145.                 Buffer[retConnect] = ' ';
  146.         printf("%s\n", Buffer);
  147.     }

  148.     //Send "RCPT TO: " File to the Mail Server, receiver 's Mail Address
  149.     retConnect = send(server, "RCPT TO: <dl88250@gmail.com>\r\n", strlen("RCPT TO: <dl88250@gmail.com>\r\n"), 0);
  150.     if(retConnect == SOCKET_ERROR){
  151.                 printf("Send "RCPT TO: " to Mail Failure.\n");
  152.         goto WSACleanup;
  153.     }else{
  154.                 printf("RCPT TO: <dl88250@gmail.com>\n");   
  155.     }   
  156.      
  157.     //Receive Data From the Mail Server
  158.     ZeroMemory(Buffer, sizeof(Buffer));
  159.     retConnect = recv(server, Buffer, sizeof(Buffer), 0);
  160.     if(retConnect == SOCKET_ERROR){
  161.                 printf("Receive Data From the Mail Server Failure.\n");     
  162.         goto WSACleanup;      
  163.     }else{
  164.         printf("%s\n", Buffer);
  165.     }

  166.     //Send "Data" Fiele to the Mail Server, start to Send mail
  167.     retConnect = send(server, "Data\r\n", strlen("Data\r\n"), 0);
  168.     if(retConnect == SOCKET_ERROR){
  169.                 printf("Send "Data" Field to Mail Failure...\n");
  170.         goto WSACleanup;
  171.     }else{
  172.                 printf("Data\n");   
  173.     }   

  174.     //Receive Data From the Mail Server
  175.     ZeroMemory(Buffer, sizeof(Buffer));
  176.     retConnect = recv(server, Buffer, sizeof(Buffer), 0);
  177.     if(retConnect == SOCKET_ERROR){
  178.                 printf("Receive Data From Mail Server Failure...\n");     
  179.         goto WSACleanup;      
  180.     }else{
  181.         printf("%s\n", Buffer);
  182.     }

  183.     //Send Mail data to the the Mail Server
  184.     retConnect = send(server, MailData, strlen(MailData), 0);
  185.     if(retConnect == SOCKET_ERROR){
  186.                 printf("Send Context Of Mail to Mail Failure...\n");
  187.         goto WSACleanup;
  188.     }else{
  189.                 printf("%s\n", MailData);
  190.     }

  191.     //Receive Data From the Mail Server
  192.     ZeroMemory(Buffer, sizeof(Buffer));
  193.     retConnect = recv(server, Buffer, sizeof(Buffer), 0);
  194.     if(retConnect == SOCKET_ERROR){
  195.                 printf("Receive Data From Mail Server Failure...\n");     
  196.         goto WSACleanup;      
  197.     }else{
  198.         printf("%s\n", Buffer);
  199.     }

  200.     //Send "QUIT" Context to the Mail Server
  201.     retConnect = send(server, "QUIT\r\n", strlen("QUIT\r\n"), 0);
  202.     if(retConnect == SOCKET_ERROR){
  203.                 printf("Send "Quit" to Mail Failure...\n");
  204.         goto WSACleanup;
  205.     }else{
  206.                 printf("Quit\n");   
  207.     }   
  208.    
  209.     printf("Send Mail Successful!\n");
  210.                
  211.         WSACleanup:{
  212.                 if(server != INVALID_SOCKET){
  213.                         closesocket(server);
  214.         }
  215.         WSACleanup();         
  216.         }
  217.     system("pause");
  218.         return 0;
  219. }
复制代码

其中需要注意的是寄件人地址与邮件内容里的邮件地址的关系:

寄件人的地址必须和你用的连接帐号一致。帐号和密码是使用Base64编码的(关于什么是Base64编码请到http://www.ynutx.net/blog/user1/Myth/archives/2006/1682.html下面看看,它的C实现代码在下面)。。。。

而在邮件内容里的地址只是一个告诉邮件服务器这封信是谁发的。可以和你所使用的发送帐号不一致!也就是说你可以伪造别人的地址进行邮件发送。。。。

哎,不要干什么干事哟^_^! 看邮件头是可以看出原始地址的哦:10:
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html
云南大学2016年考研复试信息分享

该用户从未签到

发表于 2006-9-12 09:05:04 | 显示全部楼层
有没有下载地址~~咳咳~~弄下来玩玩
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

该用户从未签到

 楼主| 发表于 2006-9-12 09:55:52 | 显示全部楼层
原帖由 雨夜心情 于 2006-9-12 09:05 发表
有没有下载地址~~咳咳~~弄下来玩玩

下载地址?
我写的。。。。这个是。。。。
你要.exe文件吗?
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

该用户从未签到

发表于 2006-9-12 10:14:43 | 显示全部楼层
哈哈,楼主好厉害哦
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

该用户从未签到

发表于 2006-9-12 10:56:14 | 显示全部楼层
肯定的嘛,要程序来干嘛~~我们是实用主义~~只喜欢用~~我帮你测试一下,给你些意见~~
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

该用户从未签到

 楼主| 发表于 2006-9-12 16:18:23 | 显示全部楼层
这个是可执行文件。。。。

SendMail.rar

28.06 KB, 下载次数: 1, 下载积分: 金币 -1

东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

该用户从未签到

发表于 2006-9-12 18:26:13 | 显示全部楼层
下载了~~3Q~~~
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

该用户从未签到

 楼主| 发表于 2006-9-12 21:23:19 | 显示全部楼层
- -!
东陆风华APP客户端 http://bbs.ynutx.net/appbyme_app-download.html

本版积分规则

关闭

站长推荐上一条 /2 下一条

QQ|小黑屋|手机版|Archiver|东陆风华,凝聚云大人的力量 ( 滇ICP备07500061号-1 )

GMT+8, 2024-5-4 11:58 , Processed in 0.140625 second(s), 35 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表