smtp.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #ifndef HV_SMTP_H_
  2. #define HV_SMTP_H_
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #define SMTP_PORT 25
  7. #define SMTPS_PORT 465
  8. #define SMTP_EOB "\r\n.\r\n"
  9. #define SMTP_EOB_LEN 5
  10. // smtp_command
  11. // XX(name, string)
  12. #define SMTP_COMMAND_MAP(XX)\
  13. XX(HELO, HELO) \
  14. XX(EHLO, EHLO) \
  15. XX(AUTH, AUTH) \
  16. XX(MAIL, MAIL FROM:) \
  17. XX(RCPT, RCPT TO:) \
  18. XX(DATA, DATA) \
  19. XX(QUIT, QUIT) \
  20. enum smtp_command {
  21. #define XX(name, string) SMTP_##name,
  22. SMTP_COMMAND_MAP(XX)
  23. #undef XX
  24. };
  25. // smtp_status
  26. // XXX(code, name, string)
  27. #define SMTP_STATUS_MAP(XXX) \
  28. XXX(220, READY, Ready) \
  29. XXX(221, BYE, Bye) \
  30. XXX(235, AUTH_SUCCESS, Authentication success) \
  31. XXX(250, OK, OK) \
  32. XXX(334, AUTH, Auth input) \
  33. XXX(354, DATA, End with <CR><LF>.<CR><LF>) \
  34. XXX(500, BAD_SYNTAX, Bad syntax) \
  35. XXX(502, NOT_IMPLEMENTED,Command not implemented) \
  36. XXX(503, BAD_SEQUENCE, Bad sequence of commands) \
  37. XXX(504, UNRECOGNIZED_AUTH_TYPE, Unrecognized authentication type) \
  38. XXX(535, AUTH_FAILED, Authentication failed) \
  39. XXX(553, ERR_MAIL, Mailbox name not allowed) \
  40. XXX(554, ERR_DATA, Transaction failed) \
  41. enum smtp_status {
  42. #define XXX(code, name, string) SMTP_STATUS_##name = code,
  43. SMTP_STATUS_MAP(XXX)
  44. #undef XXX
  45. };
  46. typedef struct mail_s {
  47. char* from;
  48. char* to;
  49. char* subject;
  50. char* body;
  51. } mail_t;
  52. const char* smtp_command_str(enum smtp_command cmd);
  53. const char* smtp_status_str(enum smtp_status status);
  54. // cmd param\r\n
  55. int smtp_build_command(enum smtp_command cmd, const char* param, char* buf, int buflen);
  56. // status_code status_message\r\n
  57. int sendmail(const char* smtp_server,
  58. const char* username,
  59. const char* password,
  60. mail_t* mail);
  61. #ifdef __cplusplus
  62. }
  63. #endif
  64. #endif // HV_SMTP_H_