smtp_client_example.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*************************************************
  2. Copyright (c) 2019
  3. All rights reserved.
  4. File name: smtp_client_example.c
  5. Description: smtp发送邮件示例邮件
  6. History:
  7. 1. Version: V1.0.0
  8. Date: 2019-10-14
  9. Author: wangjunjie
  10. Modify:
  11. 2. Version: V1.0.1
  12. Date: 2019-10-14
  13. Author: wangjunjie
  14. Modify: 添加多收件人功能
  15. *************************************************/
  16. #include "smtp_client.h"
  17. #include "rtthread.h"
  18. //若使用TLS加密则需要更大的堆栈空间
  19. #ifdef SMTP_CLIENT_USING_TLS
  20. #define SMTP_CLIENT_THREAD_STACK_SIZE 4096
  21. #else
  22. #define SMTP_CLIENT_THREAD_STACK_SIZE 2048
  23. #endif
  24. /*
  25. *邮件信息相关宏定义
  26. */
  27. //smtp 服务器域名
  28. #define SMTP_SERVER_ADDR "smtp.qq.com"
  29. //smtp 服务器端口号
  30. #define SMTP_SERVER_PORT "25"
  31. //smtp 登录用户名
  32. #define SMTP_USERNAME ""
  33. //smtp 登录密码(或凭证)
  34. #define SMTP_PASSWORD ""
  35. //邮件主题
  36. #define SMTP_SUBJECT "SMTP TEST"
  37. //邮件内容
  38. char *content = "THIS IS SMTP TEST\r\n"
  39. "HELLO SMTP\r\n"
  40. "--------------------------------------\r\n"
  41. "based on ---> RT-Thread\r\n"
  42. "based on ---> SMTP_CLIENT\r\n";
  43. void smtp_thread(void *param)
  44. {
  45. //手动延时等待网络初始化成功
  46. rt_thread_delay(10000);
  47. //初始化smtp客户端
  48. smtp_client_init();
  49. //设置服务器地址
  50. smtp_set_server_addr(SMTP_SERVER_ADDR, ADDRESS_TYPE_DOMAIN, SMTP_SERVER_PORT);
  51. //设置服务器认证信息
  52. smtp_set_auth(SMTP_USERNAME, SMTP_PASSWORD);
  53. //添加收件人1
  54. smtp_add_receiver("abc@test.com");
  55. //添加收件人2
  56. smtp_add_receiver("def@test.com");
  57. //添加收件人3
  58. smtp_add_receiver("hij@test.com");
  59. //删除收件人2
  60. smtp_delete_receiver("def@test.com");
  61. //发送邮件
  62. rt_kprintf("\r\n[smtp]: O > start to send mail\r\n");
  63. if (smtp_send_mail(SMTP_SUBJECT, content) == 0)
  64. {
  65. //发送成功
  66. rt_kprintf("\r\n[smtp]: O > send mail success!\r\n");
  67. }
  68. else
  69. {
  70. //发送失败
  71. rt_kprintf("\r\n[smtp]: X > send mail fail!\r\n");
  72. }
  73. }
  74. int smtp_thread_entry(void)
  75. {
  76. rt_thread_t smtp_client_tid;
  77. //创建邮件发送线程(如果选择在主函数中直接调用邮件发送函数,需要注意主函数堆栈大小,必要时调大)
  78. smtp_client_tid = rt_thread_create("smtp", smtp_thread, RT_NULL, SMTP_CLIENT_THREAD_STACK_SIZE, 20, 5);
  79. if (smtp_client_tid != RT_NULL)
  80. {
  81. rt_thread_startup(smtp_client_tid);
  82. }
  83. return RT_EOK;
  84. }
  85. INIT_APP_EXPORT(smtp_thread_entry);