資源簡介
一個簡單的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年數據省市區三級
- 下一篇:指數平滑算法
評論
共有 條評論