资源简介
一个简单的C实现pop3接收邮件,可删除邮件
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXDATA 200
#define POP3_PORT 110
#define POP3_USER 1
#define POP3_PASS 2
#define POP3_STAT 3
#define POP3_LIST 4
#define POP3_RETR 5
#define POP3_DELE 6
#define POP3_QUIT 7
#define POP3_USER_PASS_ISEMPTY 10
#define POP3_USER_TO_LONG 11
#define POP3_pass_TO_LONG 12
#define POP3_USER_ERR 13
#define POP3_PASS_ERR 14
#define POP3_NO_ONLINE 20
typedef struct
{
int online;
int email;
int total;
}pop3*p_pop3;
p_pop3 t_pop3;
int connecting(char *serverint port)
{
int sockfdnet_type;
int len=-1;
char buf[MAXDATA];
char *serverip;
struct hostent *phost = (struct hostent *)malloc(sizeof(struct hostent));
char **pptr;
bzero(bufMAXDATA);
struct sockaddr_in server_addr;
bzero(&server_addrsizeof(struct sockaddr_in));
server_addr.sin_port=htons(POP3_PORT);
if((phost = gethostbyname(server))==NULL)
{
printf(“gethostbyname failed\n“);
return 0;
}
net_type=(int)phost->h_addrtype;
serverip=(char *)inet_ntop(phost->h_addrtypephost->h_addrbufsizeof(buf));
if((sockfd=socket(net_typeSOCK_STREAM0))==-1)
{
perror(“socket\n“);
exit(1);
}
server_addr.sin_family=net_type;
server_addr.sin_addr.s_addr=inet_addr(serverip);
printf(“address:%s\n“serverip);//_list[0]
// pptr=phost->h_addr_list;
// for(;*pptr!=NULL;pptr++)
// {
// printf(“address:%s\n“inet_ntop(phost->h_addrtype*pptrbufsizeof(buf)));
// }
// if(phost->h_addrtype==AF_INET)
// printf(“me:AF_NET\n“);
// else
// printf(“me:AF_INET6\n“);
if(connect(sockfd(struct sockaddr *)&server_addrsizeof(struct sockaddr))==-1)
{
perror(“connecting......\n“);
}
if((len=read(sockfdbufMAXDATA))<0)
{
perror(“me:connecting......\n“);
}
// buf[len]=‘\0‘;
// printf(“me:buf %s\n“);
return sockfd;
}
int isok(int sockfd)
{
int len=-1;
char rec_buf[MAXDATA];
bzero(rec_bufMAXDATA);
if((len=recv(sockfdrec_bufMAXDATA0))<=0)
return 0;
else
{
rec_buf[len]=‘\0‘;
printf(“me:%s\n“rec_buf);
if(strncmp(rec_buf“+OK“3)==0)
return 1;
else return 0;
}
}
int pop3_login_send(int sockfdchar *bufint lenint flg)
{
char cmd[50];
bzero(cmd50);
switch (flg)
{
case POP3_USER:
len=snprintf(cmdlen+8“USER %s\r\n“buf);
break;
case POP3_PASS:
len=snprintf(cmdlen+8“PASS %s\r\n“buf);
break;
}
if(send(sockfdcmdlen0)!=len)
{
printf(“me:err cmd send\n“);
return 0;
}
else if(isok(sockfd))
return 1;
}
int pop3_login(int sockfdchar *userchar *pass)
{
int user_len=strlen(user);
int pass_len=strlen(pass);
if(user_len<=0||pass_len<=0)
return POP3_USER_PASS_ISEMPTY;
if(user_len>40)
return POP3_USER_TO_LONG;
if(pass_len>40)
return POP3_pass_TO_LONG;
if(pop3_login_send(sockfduseruser_lenPOP3_USER)==1)
{
if(pop3_login_
- 上一篇:省市区2019年数据省市区三级
- 下一篇:指数平滑算法
评论
共有 条评论