• 大小: 7KB
    文件类型: .c
    金币: 2
    下载: 0 次
    发布日期: 2024-02-01
  • 语言: 其他
  • 标签: pop3  

资源简介

一个简单的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_

评论

共有 条评论