使用SMTP 和POP3 协议实现收发邮件(C C++)_pop3 curl ssl c+(2)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  1. 23         struct sockaddr_in server;
  2. 24         struct hostent *hp;
  3. 25 };
  4. 26
  5. 27 #endif

sock.cpp文件

  1. 1 #include “sock.h”
  2. 2 #include
  3. 3 #include <netdb.h>
  4. 4 #include <string.h>
  5. 5 #include <sys/types.h>
  6. 6
  7. 7 Sock::Sock()
  8. 8 {
  9. 9     sock = socket(AF_INET, SOCK_STREAM, 0);
  10. 10     if(sock == -1)
  11. 11     {
  12. 12         throw std::runtime_error(“socket init error\n”);
  13. 13     }
  14. 14 }
  15. 15 Sock::~Sock()
  16. 16 {
  17. 17     close(sock);
  18. 18 }
  19. 19 bool Sock::Connect(const char *host_id, const int &port)
  20. 20 {
  21. 21     server.sin_family = AF_INET;
  22. 22     hp = gethostbyname(host_id);
  23. 23     if(hp == (struct hostent *) 0)
  24. 24     {
  25. 25         std::cerr << “服务器地址获取失败!” << std::endl;
  26. 26         return false;
  27. 27     }
  28. 28     memcpy((char *)&server.sin_addr,
  29. 29             (char *)hp->h_addr, hp->h_length);
  30. 30     server.sin_port = htons(port);
  31. 31     if(connect(sock, (sockaddr *) &server, sizeof server) == -1)
  32. 32     {
  33. 33         std::cerr << “连接服务器失败!” << std::endl;
  34. 34         return false;
  35. 35     }
  36. 36     else
  37. 37         return true;
  38. 38 }
  39. void Sock::send_socket(const char *s)
  40. 40 {
  41. 41     send(sock, s, strlen(s), 0);
  42. 42 }
  43. 43 int Sock::recv_socket()
  44. 44 {
  45. 45     memset(recvbuf, 0,BUFSIZ);
  46. 46     return recv(sock, recvbuf, BUFSIZ, 0);
  47. 47 }
  48. 48 const char * Sock::get_recvbuf()
  49. 49 {
  50. 50     return recvbuf;
  51. 51 }

下面是用SMTP协议发送邮件,格式就如代码所示。了解下SMTP协议,依葫芦画瓢了。

  1. 1 #include “sock.h”
  2. 2 #include
  3. 3
  4. 4 int main()
  5. 5 {
  6. 6     Sock sock;
  7. 7     const char *host_id = “smtp.126.com”;
  8. 8     int port = 25;//smtp协议专用端口
  9. 9     char wkstr[100] = “hello,how are you?”;//邮件内容
  10. 10     if(sock.Connect(host_id, port) == false)
  11. 11         return 1;
  12. 12     sock.recv_socket();
  13. 13     std::cout << “Client : connected! \nServer :”
  14. 14         << sock.get_recvbuf() << std::endl;
  15. 15
  16. 16    /* EHLO指令是必须首先发的,相当于和服务器说hello */
  17. 17     sock.send_socket(“EHLO **********\r\n”);//邮箱用户名
  18. 18     sock.recv_socket();
  19. 19     std::cout << “Client : send helo \nServer :”
  20. 20         << sock.get_recvbuf() << std::endl;
  21. 21
  22. 22     /*发送 auth login 指令,告诉服务器要登录邮箱*/
  23. 23     sock.send_socket(“auth login\r\n”);
  24. 24     sock.recv_socket();
  25. 25     std::cout << “Client : send auth login \nServer :”
  26. 26         << sock.get_recvbuf() << std::endl;
  27. 27
  28. 28     /*告诉服务器要登录后,接着就是把用户名发过去了.
  29. 29       不过这个用户名是经过了base64编码的,smtp也支持
  30. 30       明文传送,至于具体有什么区别上网上找资料看看就知道了*/
  31. 31     sock.send_socket(“**********”);//经过base64编码后的邮箱用户名
  32. 32     sock.send_socket(“\r\n”);
  33. 33     sock.recv_socket();
  34. 34     std::cout << “Client : send name \nServer :”
  35. 35         << sock.get_recvbuf() << std::endl;
  36. 37    /* 用户名发过去后接着就是用户密码了,当然也是经过base64编码后的*/
  37. 38     sock.send_socket(“base64编码后的密码”);
  38. 39     sock.send_socket(“\r\n”);
  39. 40     sock.recv_socket();
  40. 41     std::cout << “Client : send password \nServer :”
  41. 42         << sock.get_recvbuf() << std::endl;
  42. 43
  43. 44     /*发送 mail from 指令,相当于填写发件人*/
  44. 45     sock.send_socket(“mail from: <”);

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

dn.net/topics/618668825)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值