读取邮件

要去邮箱开启授权码

然后就可以读取登陆

下图是已经截取过的邮件内容(前面还有许多邮件头什么的)了,在第一个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\n",
        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\r\n","[email protected]");
    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\r\n","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\r\n",sequence);
    send(sock,buf,strlen(buf), 0);

    recv(sock, recvbuf, 4096, 0);
    FindData(recvbuf);
    }
}
void FindData(char *addr){
  //移动指针就出错,我也不知道哪里出错了。
//printf("%s",addr); //printf("************************************************************\n"); const char *p1=addr; const char *p2="Content-Transfer-Encoding: base64"; //匹配 char *p=strstr(p1,p2); printf("%s",p); }

猜你喜欢

转载自www.cnblogs.com/tangdingkang/p/12298325.html