读取邮件
Posted tangdingkang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读取邮件相关的知识,希望对你有一定的参考价值。
要去邮箱开启授权码
然后就可以读取登陆
下图是已经截取过的邮件内容(前面还有许多邮件头什么的)了,在第一个Content-Transfer-Encoding: base64后面就是加密过的内容,
我搞了很久,每次移动指针到内容,程序就崩溃了,不知道是不是哪里不对,只好把东西复制下来解密
要是有大神解决了,麻烦评论一下。
#include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #include <stdlib.h> #include "base64.h" #define RESPONSE_BUFFER_SIZE 3000 SOCKET sock; int main() { char login[128]; char pass[128]; sock=ConnectToServer(); printf("请输入邮箱账号:"); scanf("%s",login); printf("请输入邮箱授权码:"); scanf("%s",pass); Login(login,pass,sock); return 0; } int ConnectToServer() { struct hostent FAR *pHostent; struct sockaddr_in serAddr = { 0 }; char buf[1500] = { 0 }; char rbuf[1500] = { 0 }; //非常重要 WSADATA WSAData; WSAStartup(MAKEWORD(2, 2), &WSAData); memset(&serAddr, 0, sizeof(serAddr)); serAddr.sin_family = AF_INET; serAddr.sin_port = htons(110); pHostent = gethostbyname("pop.163.com"); // 端口和服务器 memcpy(&serAddr.sin_addr.S_un.S_addr, pHostent->h_addr_list[0], pHostent->h_length); printf("IP of pop.163.com is : %d:%d:%d:%d ", serAddr.sin_addr.S_un.S_un_b.s_b1, serAddr.sin_addr.S_un.S_un_b.s_b2, serAddr.sin_addr.S_un.S_un_b.s_b3, serAddr.sin_addr.S_un.S_un_b.s_b4); SOCKET connection; connection = socket(PF_INET, SOCK_STREAM, 0); if(connection<0){ printf("建立TCP连接失败!"); exit(0); } if(connect(connection, (SOCKADDR *)&serAddr, sizeof(serAddr))<0){ printf("连接失败!"); exit(0); } if(recv(connection, rbuf, 1500, 0)==0){ printf("看来连接是失败了"); exit(0); } else printf("%s",rbuf); return connection; } void Login(char*login,char*pass,SOCKET sock){ char buf[100]; char rbuf[100]; memset(buf, 0, 100); sprintf(buf,"user %s ","dingkangtang@163.com"); send(sock, buf, strlen(buf), 0); memset(rbuf, 0, 100); recv(sock, rbuf,100, 0); printf("%s",rbuf); memset(buf, 0, 100); sprintf(buf,"pass %s ","W12345678"); printf("%s",buf); send(sock, buf, strlen(buf), 0); memset(rbuf, 0, 100); recv(sock, rbuf,100, 0); printf("%s",rbuf); char recvbuf[4096]; while(1){ printf("要查看第封邮件:(输入0退出程序)"); int sequence; scanf("%d",&sequence); if(sequence==0) break; memset(buf, 0, 100); sprintf(buf,"retr %d ",sequence); send(sock,buf,strlen(buf), 0); recv(sock, recvbuf, 4096, 0); FindData(recvbuf); } } void FindData(char *addr){
//移动指针就出错,我也不知道哪里出错了。 //printf("%s",addr); //printf("************************************************************ "); const char *p1=addr; const char *p2="Content-Transfer-Encoding: base64"; //匹配 char *p=strstr(p1,p2); printf("%s",p); }
以上是关于读取邮件的主要内容,如果未能解决你的问题,请参考以下文章
solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例