SMTP协议初探(二)----linux下c编程实现发邮件
来源:互联网 发布:慢走丝编程 编辑:程序博客网 时间:2024/04/30 15:35
仿照,SMTP协议初探(一)--我的前一篇博客,结合网上的材料,利用socket,写了个Linux下c编程实现的发邮件程序。
大家可以拿自己的邮箱去做实验啦,base64是一种编码方式,网上可以找到一个网页,可以查询密码的base64编码是多少。当然也可以自己手工计算(我没试过)。
具体源码如下:
//#include<iostream>#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <string.h> //using namespace std; #define EHLO "EHLO ***\r\n" //***为邮箱用户名 #define DATA "data\r\n" #define QUIT "QUIT\r\n" //#define h_addr h_addr_list[0] //FILE *fin; int sock; struct sockaddr_in server; struct hostent *hp, *gethostbyname(); char buf[BUFSIZ+1]; int len; char *host_id="smtp.126.com"; char *from_id="***@126.com"; char *to_id="60462****@qq.com"; char *sub="testmail\r\n"; char wkstr[100]="hello how r u\r\n"; /*=====Send a string to the socket=====*/ void send_socket(char *s) { write(sock,s,strlen(s)); //write(1,s,strlen(s)); //printf("Client:%s\n",s); } //=====Read a string from the socket=====*/ void read_socket() {len = read(sock,buf,BUFSIZ);write(1,buf,len);//printf("Server:%s\n",buf); } /*=====MAIN=====*/ int main(int argc, char* argv[]) { /*=====Create Socket=====*/sock = socket(AF_INET, SOCK_STREAM, 0); if (sock==-1) {perror("opening stream socket");//exit(1); return 1; } else //cout << "socket created\n";printf("socket created\n");/*=====Verify host=====*/server.sin_family = AF_INET;hp = gethostbyname(host_id);if (hp==(struct hostent *) 0){fprintf(stderr, "%s: unknown host\n", host_id);//exit(2);return 2;}/*=====Connect to port 25 on remote host=====*/memcpy((char *) &server.sin_addr, (char *) hp->h_addr, hp->h_length); server.sin_port=htons(25); /* SMTP PORT */if (connect(sock, (struct sockaddr *) &server, sizeof server)==-1){perror("connecting stream socket");//exit(1);return 1;} else //cout << "Connected\n";printf("Connected\n");/*=====Write some data then read some =====*/read_socket(); /* SMTP Server logon string */send_socket(EHLO); /* introduce ourselves */read_socket(); /*Read reply *//***added by fupeng*/send_socket("AUTH LOGIN");send_socket("\r\n");read_socket();send_socket("*******");//用户名的base64编码send_socket("\r\n");read_socket();send_socket("******");//密码的base64编码send_socket("\r\n");read_socket();send_socket("mail from <");send_socket(from_id);send_socket(">");send_socket("\r\n");read_socket(); /* Sender OK *///send_socket("VRFY ");//send_socket(from_id);//send_socket("\r\n"); //read_socket(); // Sender OK */send_socket("rcpt to <"); /*Mail to*/send_socket(to_id);send_socket(">");send_socket("\r\n");read_socket(); // Recipient OK*/send_socket(DATA);// body to follow*/read_socket(); //send_socket("from:***@126.com");send_socket("subject:");send_socket(sub);//read_socket(); // Recipient OK*/send_socket("\r\n\r\n");send_socket(wkstr);send_socket(".\r\n");read_socket();send_socket(QUIT); /* quit */read_socket(); // log off *///=====Close socket and finish=====*/close(sock);//exit(0);return 0;}
具体结果如下图片所示:
- SMTP协议初探(二)----linux下c编程实现发邮件
- SMTP协议初探(二)----linux下c编程实现发邮件
- SMTP协议初探(1)----dos下telnet命令发邮件
- LINUX下通过外部SMTP发邮件
- 邮件传输协议(SMTP/POP3)初探
- smtp发邮件(C#)
- C#SMTP发邮件
- php smtp协议发邮件
- C语言实现SMTP协议发送邮件
- linux 系统在终端中用SMTP协议发邮件
- 发邮件的协议: smtp 协议:
- smtp协议发邮件(需用户登录部分)
- 【计算机网络】:SMTP协议详解(如何在控制台发邮件)
- 在linux下利用Google的SMTP来发邮件
- flex使用smtp协议发邮件
- LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix)
- LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix)
- LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix)
- 开篇
- Oracle Rules Manager 和 Oracle Expression Filter 组件 说明
- 热水器
- Linux下Bind error: Address already in use处理
- Android APK反编译详解(附图)
- SMTP协议初探(二)----linux下c编程实现发邮件
- 找符合条件的整数
- 一个C++构造函数,内存分配的例子
- 硬盘资料与知识大全
- ORA-27101: shared memory realm does not exist 错误的处理
- 高性能Socket服务器编程
- 图结构(GraphStructure) 探讨
- 华为校招上机题
- 通过例子说明CMMI各级别不同