⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smtpio.h

📁 LINUX下的收发E-MAIL的程序
💻 H
字号:

#ifndef __SMTPIO_H__
#define __SMTPIO_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */



#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <netdb.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/un.h>

#undef MIN
#undef MAX

#include "defines.h"
#include "parse.h"
#include "sockio.h"
#include "util.h"
#include "mime.h"

// version information for smtpio 
#define VER_MAJOR '0'
#define VER_MINOR '1'
#define VER_REL   '0'

// message status's 
#define UNDELIVERED  1
#define DELIVERING   2
#define DELIVERED    3

// SMTP numerical responses for checking (some smtp servers may not
// say "250 <user@host.com> Recipient ok..." so we should check for the 
// numbers that the SMTP server sends back to us instead.) 
#define UnknownCmd     "500"
#define SyntaxErr      "501"
#define CmdNotImpl     "502"
#define BadSeqComs     "503"
#define SysStatRep     "211"
#define HelpInfo       "214"
#define ServiceRdy     "220"
#define ServClose      "221"
#define ServNotAvail   "421"
#define AuthLoginCon   "334"
#define AuthLoginOK    "235"
#define ReqMlActOK     "250"
#define UsrNotLocal    "251"
#define MailboxBusy    "450"
#define ReqNotTaken    "550"
#define ReqAborted     "451"
#define UsrNtLoclTry   "551"
#define InsuffStorage  "452"
#define ExcedStorAlloc "552"
#define MbxNmNotAlwd   "553"
#define StrtMailInpt   "354"
#define TransFailed    "554"

// Error numbers. 
typedef enum 
{
  S_NO_ERROR,
  S_ERR_PREPARE_MAIL_SERVER,
  S_ERR_RESOLVE,
  S_ERR_SOCKET,
  S_ERR_CONNECT,
  S_ERR_SERV_ACK, 
  S_ERR_HELO_SEND,
  S_ERR_HELO_RECV,
  S_ERR_AUTH_LOGIN,
  S_ERR_AUTH_USER,
  S_ERR_AUTH_PASSWORD,
  S_ERR_MAIL_SEND,
  S_ERR_MAIL_RECV, 
  S_ERR_RCPT_SEND,
  S_ERR_RCPT_RECV,
  S_ERR_DATA_SEND,
  S_ERR_DATA_RECV,
  S_ERR_BODY_RECV,
  S_ERR_RSET_SEND,
  S_ERR_RSET_RECV, 
  S_ERR_QUIT_SEND,
  S_ERR_QUIT_RECV,
  S_ERR_INV_SENDR,
  S_ERR_INV_RECIP
} SMTPError;
					  
typedef union 
{
   char string[6];
   struct 
   {
      char major;
      char delim1;
      char minor;
      char delim2;
      char release;
      char null;
   } part;
} Version;
/*
typedef struct 
{
   char *to, *to_addr;
   char *cc, *cc_addr;
   char *from, *from_addr;
   char *replyto;
   char *header;
   char *subject;
   char *xmailer;
   char *mime_version;
   char *content_type;
   char *content_transfer_encoding;
   char *body;
   unsigned int status:2;
} Email;
*/
typedef struct 
{
   char to_addr[80];
   char cc_addr[80];
   char from_addr[32];
   char replyto[32];
   char header[320];
   char subject[64];
   char xmailer[32];
   char mime_version[32];
   char content_type[64];
   char content_transfer_encoding[64];
   char body[1024];
   unsigned int status:2;
} Email;
typedef struct _Mlist Mlist;
struct _Mlist
{
	char *data;
	Mlist *next;
}; 

char *smtpArror(void);

void email_destroy ( Email *msg);

int format_date (char *date, size_t date_size);

int format_header (Email *msg);

int get_email_addr_from_text (char *addr, char *email);

int eml_smtp_helo (int sock);

int eml_smtp_auth (int sock, char *username, char *password);

int eml_smtp_mail (int sock, const char *sender);

int eml_smtp_rcpt (int sock, char *recipient, char *orig_rcpt);

int eml_smtp_data (int sock, char *header, char *body);

int eml_smtp_rset (int sock);

int eml_smtp_quit (int sock);

int eml_smtp_open (Server *server);

int eml_smtp_close(int sock);

int eml_send_mail_needAuth(Server *server, Email *msg, char *username, char *password);

int eml_send_mail_noNeedAuth(Server *server, Email *msg);


int eml_prepare_mail(char *smtphost, int port, char *from,char *to,char *cc, char *subject, char *textbody, Mlist *mimefiles);

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -