SMTP協議初探(二)----linux下c程式設計實現發郵件
仿照,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協議初探(1)----dos下telnet命令發郵件協議
- 郵件開發:SMTP協議詳解協議
- SMTP協議解讀以及如何使用SMTP協議傳送電子郵件協議
- Python使用POP3和SMTP協議收發郵件Python協議
- 一次郵件傳送協議SMTP問題排查協議
- linux下bluetooth程式設計(二)blueZ協議棧Linux程式設計協議
- linux下用C編寫的基於smtp的郵件傳送程式Linux
- 【C#學習筆記】smtp發郵件C#筆記
- 發SMTP而不是微軟預設的MAPI郵件微軟API
- python實現基於smtp傳送郵件Python
- 使用java語言基於SMTP協議手寫郵件客戶端Java協議客戶端
- 使用 LDAP 目錄協議實現 Domino 郵件路由LDA協議路由
- linux下bluetooth程式設計(七)SDP協議Linux程式設計協議
- 郵件協議之MIME協議
- C#實現自動發郵件C#
- Golang《基於 MIME 協議的郵件資訊解析》部分實現Golang協議
- java網路程式設計三:基於SMTP的郵件傳送客戶端Java程式設計客戶端
- 郵件開發:POP3協議詳解協議
- iOS - Swift 面向協議程式設計(二)iOSSwift協議程式設計
- 電子郵件協議及GO傳送QQ郵件協議Go
- python SMTP郵件服務Python
- Jmeter——SMTP Sampler傳送郵件JMeter
- Python SMTP傳送郵件Python
- linux下發郵件的配置Linux
- linux下php實現C/C++擴充套件程式設計LinuxPHPC++套件程式設計
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- Linux網路程式設計之原始套接字-ping協議實現Linux程式設計協議
- 雅虎擴充套件SMTP協議 確保Facebook密碼重置郵件不傳送至回收帳號套件協議密碼
- 配置mail使用SMTP傳送郵件AI
- Python使用SMTP傳送郵件Python
- 利用UTL_SMTP傳送郵件
- JS實現發郵件功能JS
- 網路通訊協議-SMTP協議詳解!協議
- 郵件協議之IMAP指令講解協議
- 利用godaddy的cpanel郵箱伺服器的smtp發郵件Go伺服器
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- 通過電子郵件發現優秀的程式設計師程式設計師
- 一個簡易郵件群發軟體設計與實現