75 lines
2.2 KiB
C
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_
|