日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5、电子邮件客户端程序设计与实现

發布時間:2024/3/24 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5、电子邮件客户端程序设计与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、設計題目

5、電子郵件客戶端程序設計與實現

二、設計內容

設計一個電子郵件客戶端程序。?

三、設計步驟

3.1原理分析

一個電子郵件系統由三部分組成:用戶代理、郵件服務器,以及郵件發送協議(如SMTP)和郵件接收協議(如POP3)。

3.2編程設計

案例的設計步驟:

  • 課本知識點分析
  • 相關步驟分析
  • 代碼設計
  • 數據結構

    關鍵代碼

    查看郵箱:

    sockClient = socket(AF_INET, SOCK_STREAM, 0); //建立socket對象

    const char *host_id = "pop3.126.com";

    pHostent = gethostbyname("pop.qq.com");

    int port = 110;

    addrServer.sin_addr.S_un.S_addr = *((DWORD *) pHostent->h_addr_list[0]); //得到smtp服務器的網絡字節序的ip地址

    addrServer.sin_family = AF_INET;

    addrServer.sin_port = htons(port); //連接端口110

    發送郵箱:

    sockClient = socket(AF_INET, SOCK_STREAM, 0); //建立socket對象

    pHostent = gethostbyname("smtp.qq.com");????? //得到有關于域名的信息,鏈接到qq郵箱服務器

    addrServer.sin_addr.S_un.S_addr = *((DWORD *) pHostent->h_addr_list[0]); //得到smtp服務器的網絡字節序的ip地址

    addrServer.sin_family = AF_INET;

    addrServer.sin_port = htons(25);????? //連接端口25

    發送base64加密的賬號與授權碼

    message = "MTkxMzM5NDg5OQ==\r\n";

    send(sockClient, message.c_str(), message.length(), 0);

    buff[recv(sockClient, buff, 500, 0)] = '\0';

    message = "cmdhbXdwc3libHdmZ2phag==\r\n";/**/

    send(sockClient, message.c_str(), message.length(), 0);

    buff[recv(sockClient, buff, 500, 0)] = '\0';

    程序流程圖

    5,Email

    四、調試過程

    ?? 難點主要是base64加密,不過借助在線解碼編碼工具,得到解決。

    五、結果及分析、

    查看郵件,程序運行情況: ??????查看結果,已加密:

    郵件代理上的結果:

    結果一致。

    發送郵件,程序運行情況(注:自己發給自己): 郵件代理上:

    順利接收應用程序發出的信息。

    六、心得體會、

    ???? 把程序設計運用到實際生活中,讓程序不只是電腦里運行的、鍛煉頭腦的代碼塊,而是可以實實在在作用于現實、帶來新的可能的有力工具。

    #include <iostream> #include <string> #include <WinSock2.h> #include <stdio.h> #include <unistd.h>using namespace std; #pragma comment(lib, "ws2_32.lib") /*鏈接ws2_32.lib動態鏈接庫*/int main() {char buff[50000]; //收到recv函數返回的結果string message;string info;string subject;WSADATA wsaData;WORD wVersionRequested = MAKEWORD(2, 1);//WSAStarup,即WSA(Windows SocKNDs Asynchronous,Windows套接字異步)的啟動命令int err = WSAStartup(wVersionRequested, &wsaData);SOCKADDR_IN addrServer; //服務端地址HOSTENT *pHostent;//hostent是host entry的縮寫,該結構記錄主機的信息,包括主機名、別名、地址類型、地址長度和地址列表SOCKET sockClient; //客戶端的套接字/*使用 MAIL 命令指定發送者使用 RCPT 命令指定接收者,可以重復使用RCPT指定多個接收者*/cout << "你想查看郵件還是發郵件?\n\t1.查看郵箱\n\t2.發送郵件\n";int call;cin >> call;if (call == 2){sockClient = socket(AF_INET, SOCK_STREAM, 0); //建立socket對象pHostent = gethostbyname("smtp.qq.com"); //得到有關于域名的信息,鏈接到qq郵箱服務器addrServer.sin_addr.S_un.S_addr = *((DWORD *) pHostent->h_addr_list[0]); //得到smtp服務器的網絡字節序的ip地址addrServer.sin_family = AF_INET;addrServer.sin_port = htons(25); //連接端口25//int connect (SOCKET s , const struct sockaddr FAR *name , int namelen ); //函數原型err = connect(sockClient, (SOCKADDR *) &addrServer, sizeof(SOCKADDR)); //向服務器發送請求buff[recv(sockClient, buff, 500, 0)] = '\0';/*登錄郵件服務器*/message = "ehlo qq.com\r\n";send(sockClient, message.c_str(), message.length(), 0); //發送ehlo命令buff[recv(sockClient, buff, 500, 0)] = '\0'; //接收返回值// cout <<"1" << buff << endl;message = "auth login\r\n";send(sockClient, message.c_str(), message.length(), 0);buff[recv(sockClient, buff, 500, 0)] = '\0';// cout <<"2" << buff << endl;/*發送base64加密的用戶名、密碼*/message = "MTkxMzM5NDg5OQ==\r\n";send(sockClient, message.c_str(), message.length(), 0);buff[recv(sockClient, buff, 500, 0)] = '\0';// cout <<"3" << buff << endl;message = "cmdhbXdwc3libHdmZ2phag==\r\n";/**/send(sockClient, message.c_str(), message.length(), 0);buff[recv(sockClient, buff, 500, 0)] = '\0';// cout <<"4" << buff << endl;string mail;cout << "請輸入收件人郵箱:";cin >> mail; //925541107@qq.commessage = "MAIL FROM:<1913394899@qq.com> \r\nRCPT TO:<";message.append(mail);message.append("> \r\n");send(sockClient, message.c_str(), message.length(), 0);buff[recv(sockClient, buff, 500, 0)] = '\0';cout <<"5" << buff << endl;buff[recv(sockClient, buff, 500, 0)] = '\0';/*使用 DATA 命令告訴服務器要發送郵件內容*/message = "DATA\r\n";send(sockClient, message.c_str(), message.length(), 0);buff[recv(sockClient, buff, 500, 0)] = '\0';// cout <<"6" << buff << endl;message = "From: 1913394899@qq.com\r\nTo: " + mail + "\r\nsubject:";cout << "主題:";cin >> subject;message.append(subject);message.append("\r\n\r\n");cout << "內容:";cin >> info;message.append(info);message.append("\r\n.\r\n");send(sockClient, message.c_str(), message.length(), 0);// cout <<"7" << buff << endl;message = "QUIT\r\n";send(sockClient, message.c_str(), message.length(), 0);buff[recv(sockClient, buff, 500, 0)] = '\0';// cout <<"8" << buff << endl;cout << "發送成功!" << endl;//system("pause");}if (call == 1){sockClient = socket(AF_INET, SOCK_STREAM, 0); //建立socket對象const char *host_id = "pop3.126.com";pHostent = gethostbyname("pop.qq.com");int port = 110;addrServer.sin_addr.S_un.S_addr = *((DWORD *) pHostent->h_addr_list[0]); //得到smtp服務器的網絡字節序的ip地址addrServer.sin_family = AF_INET;addrServer.sin_port = htons(port); //連接端口110err = connect(sockClient, (SOCKADDR *) &addrServer, sizeof(SOCKADDR)); //向服務器發送請求buff[recv(sockClient, buff, 500, 0)] = '\0';message = "user 1913394899@qq.com\r\n";send(sockClient, message.c_str(), message.length(), 0); //發送賬號buff[recv(sockClient, buff, 500, 0)] = '\0'; //接收返回值// std::cout << "Client : send name \nServer:"// << buff << std::endl;message = "pass rgamwpsyblwfgjaj\r\n";send(sockClient, message.c_str(), message.length(), 0); //發送授權碼buff[recv(sockClient, buff, 500, 0)] = '\0'; //接收返回值//std::cout << "Client : send pass \nServer:"// << buff << std::endl;message = "stat\r\n";send(sockClient, message.c_str(), message.length(), 0); //發送狀態buff[recv(sockClient, buff, 500, 0)] = '\0'; //接收返回值 // sleep(1);//std::cout << "Client : send stat \nServer : "// << buff << std::endl;message = "list\r\n";send(sockClient, message.c_str(), message.length(), 0); //發送狀態buff[recv(sockClient, buff, 50000, 0)] = '\0'; //接收返回值 // sleep(1);std::cout << "Client : send list \nServer :"<< buff << std::endl;while(1){int n;std::cout << "你先想查看那一封郵件?輸入序號"<< std::endl;cin >> n;message = "retr " + to_string(n) + "\r\n";send(sockClient, message.c_str(), message.length(), 0); //發送狀態 // sleep(1);std::cout << "Client : send retr (...) \n";buff[recv(sockClient, buff, 50000, 0)] = '\0'; //接收返回值std::cout << "Server :" << buff << std::endl;}//下面的while循環有些問題,目前還沒有想到解決方法。以后改正!// while(1)// {/*int num = sock.recv_socket();std::cout << "Server :" << sock.get_recvbuf() << std::endl;*//* if(num <= 0){break;}*/// }/* sock.send_socket("quit\r\n");std::cout << "Client : send quit \nServer :"<< sock.get_recvbuf() << std::endl;}*/} }

    總結

    以上是生活随笔為你收集整理的5、电子邮件客户端程序设计与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。