唐山培训网站建设,当当网电子商务网站建设,龙岗区教育局,到哪里找人做网站前些天发现了十分不错的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;没有广告#xff0c;分享给大家#xff0c;大家可以自行看看。#xff08;点击跳转人工智能学习资料#xff09; 微信公众号#xff1a;创享日记 发送关键词#xff1a;邮件…前些天发现了十分不错的人工智能学习网站通俗易懂风趣幽默没有广告分享给大家大家可以自行看看。点击跳转人工智能学习资料 微信公众号创享日记 发送关键词邮件系统 获取邮件发送端和接收端C语言实现源代码源文件 1.邮件发送客户端详细设计 首先将必要信息填写完整然后调用socket ()函数创建一个socket并获得其文件描述符然后定义并填写一个sockaddr_ in结构体作为后面connect ()函数的参数接着调用connect函数来建立一个TCP连接然后发送EHLO命令并打印出服务器的回复然后是发送AUTH命令(AUTH login) 并打印服务器回复接着发送用户名以及在邮箱中的得到的授权码并且分别打印服务器回复接着发送邮件发送者的邮箱地址以及邮件接收者的邮箱地址并分别打印服务器回复发送DATA命令(用于输入邮件内容该命令后面发送的所有数据都将被当做邮件内容直至遇到结束标志字符串)并打印服务器回复接着开始发送邮件内容依次发送邮件发送者信息、邮件接收者信息、正文、附件等信息其中正文以及附件采用文件读写的方式从文件中读出相应的信息再发送给服务器最后发送QUIT命令并打印服务器回复。
send部分代码
#include stdio.h
#include stdlib.h
#include string.h
#include netinet/in.h
#include arpa/inet.h
#include sys/socket.h
#include netdb.h
#include unistd.h
#include getopt.h
#include base64_utils.h#define MAX_SIZE 4095char buf[MAX_SIZE1];// receiver: mail address of the recipient
// subject: mail subject
// msg: content of mail body or path to the file containing mail body
// att_path: path to the attachment
void send_mail(const char* receiver, const char* subject, const char* msg, const char* att_path)
{const char* end_msg \r\n.\r\n;const char* host_name smtp.qq.com; // TODO: Specify the mail server domain nameconst unsigned short port 25; // SMTP server portconst char* user encode_str(1197879738qq.com); // TODO: Specify the userconst char* pass encode_str(rvamphcwfujphffj); // TODO: Specify the passwordconst char* from 1197879738qq.com; // TODO: Specify the mail address of the senderchar dest_ip[16]; // Mail server IP addressint s_fd; // socket file descriptorstruct hostent *host;struct in_addr **addr_list;int i 0;int r_size;// Get IP from domain nameif ((host gethostbyname(host_name)) NULL){herror(gethostbyname);exit(EXIT_FAILURE);}addr_list (struct in_addr **) host-h_addr_list;while (addr_list[i] ! NULL)i;strcpy(dest_ip, inet_ntoa(*addr_list[i-1]));2.邮件接收客户端详细设计 首先将必要信息填写完整然后调用socket ()函数创建一个socket 并获得其文件描述符然后定义并填写一个sockaddr_ _in 结构体作为后面connect () 函数的参数接着调用connect 函数来建立一个TCP连接;然后发送用户名和授权码并分别打印服务器回复接着依次发送STAT、LIST、 RETR 1、QUIT命令并分别打印服务器回复。
recv部分代码
#include stdio.h
#include stdlib.h
#include string.h
#include netinet/in.h
#include arpa/inet.h
#include sys/socket.h
#include netdb.h
#include unistd.h#define MAX_SIZE 65535char buf[MAX_SIZE1];void recv_mail()
{const char* host_name pop.qq.com; // TODO: Specify the mail server domain nameconst unsigned short port 110; // POP3 server portconst char* user 1197879738qq.com; // TODO: Specify the userconst char* pass rvamphcwfujphffj; // TODO: Specify the passwordchar dest_ip[16];int s_fd; // socket file descriptorstruct hostent *host;struct in_addr **addr_list;int i 0;int r_size;// Get IP from domain nameif ((host gethostbyname(host_name)) NULL){herror(gethostbyname);exit(EXIT_FAILURE);}addr_list (struct in_addr **) host-h_addr_list;while (addr_list[i] ! NULL)i;strcpy(dest_ip, inet_ntoa(*addr_list[i-1]));// TODO: Create a socket,return the file descriptor to s_fd, and establish a TCP connection to the POP3 servers_fd socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in addr;struct sockaddr_in *addr_inaddr;addr.sin_family AF_INET;addr.sin_port (port 8) | (port 8);addr_in-sin_addr.s_addr inet_addr(dest_ip);connect(s_fd, addr_in, sizeof(addr));// printf welcome messageif ((r_size recv(s_fd, buf, MAX_SIZE, 0)) -1){perror(recv);exit(EXIT_FAILURE);}buf[r_size] \0; // Do not forget the null terminatorprintf(%s, buf);