emsApplication/sdk/include/hv/smtp.h

75 lines
2.2 KiB
C

#ifndef HV_SMTP_H_
#define HV_SMTP_H_
#include "hexport.h"
#define SMTP_PORT 25
#define SMTPS_PORT 465
#define SMTP_EOB "\r\n.\r\n"
#define SMTP_EOB_LEN 5
// smtp_command
// XX(name, string)
#define SMTP_COMMAND_MAP(XX)\
XX(HELO, HELO) \
XX(EHLO, EHLO) \
XX(AUTH, AUTH) \
XX(MAIL, MAIL FROM:) \
XX(RCPT, RCPT TO:) \
XX(DATA, DATA) \
XX(QUIT, QUIT) \
enum smtp_command {
#define XX(name, string) SMTP_##name,
SMTP_COMMAND_MAP(XX)
#undef XX
};
// smtp_status
// XXX(code, name, string)
#define SMTP_STATUS_MAP(XXX) \
XXX(220, READY, Ready) \
XXX(221, BYE, Bye) \
XXX(235, AUTH_SUCCESS, Authentication success) \
XXX(250, OK, OK) \
XXX(334, AUTH, Auth input) \
XXX(354, DATA, End with <CR><LF>.<CR><LF>) \
XXX(500, BAD_SYNTAX, Bad syntax) \
XXX(502, NOT_IMPLEMENTED,Command not implemented) \
XXX(503, BAD_SEQUENCE, Bad sequence of commands) \
XXX(504, UNRECOGNIZED_AUTH_TYPE, Unrecognized authentication type) \
XXX(535, AUTH_FAILED, Authentication failed) \
XXX(553, ERR_MAIL, Mailbox name not allowed) \
XXX(554, ERR_DATA, Transaction failed) \
enum smtp_status {
#define XXX(code, name, string) SMTP_STATUS_##name = code,
SMTP_STATUS_MAP(XXX)
#undef XXX
};
typedef struct mail_s {
char* from;
char* to;
char* subject;
char* body;
} mail_t;
BEGIN_EXTERN_C
HV_EXPORT const char* smtp_command_str(enum smtp_command cmd);
HV_EXPORT const char* smtp_status_str(enum smtp_status status);
// cmd param\r\n
HV_EXPORT int smtp_build_command(enum smtp_command cmd, const char* param, char* buf, int buflen);
// status_code status_message\r\n
HV_EXPORT int sendmail(const char* smtp_server,
const char* username,
const char* password,
mail_t* mail);
END_EXTERN_C
#endif // HV_SMTP_H_