📄 smtp.cpp
字号:
#include <winsock2.h>
//#include <string.h>
#include <stdio.h>
#include "mime.h"
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib
SOCKET SockFD;
char recvbuf[1460];
// 发送数据
int senddata(const char *s)
{
puts(">>");
puts(s);
return send(SockFD, s, strlen(s), 0);
}
// 接收数据
int recvdata()
{
//return recv(SockFD, recvbuf, 1460, 0);
int len = recv(SockFD, recvbuf, 1460, 0);
recvbuf[len] = 0;
puts("<<");
puts(recvbuf);
// 提取返回码
if (len >= 3 )
{
len = ((recvbuf[0] - '0') * 100) + ((recvbuf[1] - '0') * 10) + (recvbuf[2] - '0');
return len;
}
else
return 0;
}
// 发邮件
int sendemail()
{
//LPHOSTENT pHost = gethostbyname("60.191.85.10"); // smtp.yeah.net 的ip
LPHOSTENT pHost = gethostbyname("121.14.76.66"); // smtp.qq.com 的ip
struct sockaddr_in ServAddr;
ServAddr.sin_family = AF_INET;
ServAddr.sin_addr.s_addr = *(ULONG *)pHost->h_addr_list[0];
ServAddr.sin_port = htons(25);
// 连接到SMTP服务器
// 220 smtp.qq.com ESMTP QQMail Ver 2.2
if(connect(SockFD, (struct sockaddr *)&ServAddr, sizeof(ServAddr)) == SOCKET_ERROR)
{
printf("Failed connect() \n");
return 0;
}
if (recvdata() != 220)
return 0;
//EHLO tt
// 250-mail
// 250-PIPELINING
// 250-AUTH LOGIN PLAIN
// 250-AUTH=LOGIN PLAIN
// 250 8BITMIME
senddata("EHLO tt\r\n"); // 我来了
if (recvdata() != 250)
return 0;
//AUTH LOGIN
// 334 dXNlcm5hbWU6 "username:",base64字符串
//NTg2MTkwNDI= 这是用户名"58619042",base64字符串。注意,发送者的邮箱必须先开通邮箱smtp服务!
// 334 UGFzc3dvcmQ6 "Password:",base64字符串
//xxxxxxxxxxx 这是密码,base64字符串
// 235 Authentication successful
senddata("AUTH LOGIN\r\n"); // 我要登录了
if (recvdata() != 334)
return 0;
senddata("NTg2MTkwNDI=\r\n"); // 我的用户名,记得先将明文编码成base64字符串
if (recvdata() != 334)
return 0;
senddata("xxxxxxxxxxx\r\n"); // 我的密码,记得先将明文编码成base64字符串
if (recvdata() != 235)
return 0;
//MAIL FROM: <58619042@qq.com>
// 250 Mail OK
senddata("MAIL FROM: <58619042@qq.com>\r\n"); // 发信人(我)的邮箱
if (recvdata() != 250)
return 0;
//RCPT TO: <cradio@yeah.net>
// 250 Mail OK
senddata("RCPT TO: <cradio@yeah.net>\r\n"); // 收信人(对方)的邮箱
if (recvdata() != 250)
return 0;
//Data
// 354 End data with <CR><LF>.<CR><LF>
senddata("Data\r\n"); // 我要发送数据了
if (recvdata() != 354)
return 0;
/*
// 纯英文(ANSI)
{
//Date: Tue, 24 Nov 2008 17:22:42 +0800
//From: "my name" <58619042@qq.com>
//To: "reciver name" <cradio@yeah.net>
//Subject: my title
//Message-ID: <200811172243123598816@yeah.net>
//X-mailer: Foxmail 6, 10, 201, 20 [cn]
//Mime-Version: 1.0
//Content-Type: text/plain;
//charset="gb2312"
//Content-Transfer-Encoding: 7bit
//this is my context!
//.
// 250 Mail OK queued as smtp1,ClUQrLDbMXaDgyFJo48LCg--.11284S2 1226933124
senddata(
"Date: Tue, 23 Nov 2008 21:32:42 +0800\r\n"
"From: \"my name\" <58619042@qq.com>\r\n"
"To: \"your name\" <cradio@yeah.net>\r\n"
"Subject: my title\r\n"
"Message-ID: <200811182143420623252@yeah.net>\r\n"
"X-mailer: Foxmail 6, 10, 201, 20 [cn]\r\n"
"Mime-Version: 1.0\r\n"
"Content-Type: text/plain;\r\n"
"charset=\"gb2312\"\r\n"
"Content-Transfer-Encoding: 7bit\r\n" // 编码为 ansi(每个字符只占7位)
"\r\n"
"this is my content!\r\n" // 我要发送的内容(ANSI)
".\r\n"
);
}
*/
/*
// 有汉字
{
//Date: Tue, 24 Nov 2008 16:43:42 +0800
//From: "58619042" <58619042@qq.com>
//To: "cradio" <cradio@yeah.net>
//Subject: =?gb2312?B?uf7gtg==?=
//Message-ID: <200811181643420623252@yeah.net>
//X-mailer: Foxmail 6, 10, 201, 20 [cn]
//Mime-Version: 1.0
//Content-Type: text/plain;
//charset="gb2312"
//Content-Transfer-Encoding: base64
//t+ejrMT6usOjoQ0KDQqhoaGhDQoNCqGhoaGhoaGhoaGhoaGhoaHWwg0KwPGjoQ0KDQoNCg0K
//.
// 250 Mail OK queued as smtp1,ClUQrLDbiTvBgCJJ+wEnCg--.65429S2 1226997953
senddata(
"Date: Tue, 18 Nov 2008 21:32:42 +0800\r\n"
"From: \"cradio\" <cradio@yeah.net>\r\n"
"To: \"58619042\" <58619042@qq.com>\r\n"
"Subject: =?gb2312?B?uf7gtg==?=\r\n"
"Message-ID: <200811182143420623252@yeah.net>\r\n"
"X-mailer: Foxmail 6, 10, 201, 20 [cn]\r\n"
"Mime-Version: 1.0\r\n"
"Content-Type: text/plain;\r\n"
"charset=\"gb2312\"\r\n"
"Content-Transfer-Encoding: base64\r\n"
"\r\n"
"t+ejrMT6usOjoQ0KDQqhoaGhDQoNCqGhoaGhoaGhoaGhoaGhoaHWwg0KwPGjoQ0KDQoNCg0K\r\n" // Base64编码内容
".\r\n"
);
}
*/
// 有附件
{
//Date: Tue, 24 Nov 2008 21:44:01 +0800
//From: "58619042" <58619042@qq.com>
//To: "cradio" <cradio@yeah.net>
//Subject: =?gb2312?B?uL28/g==?=
//Message-ID: <200811182144008127934@yeah.net>
//X-mailer: Foxmail 6, 10, 201, 20 [cn]
//Mime-Version: 1.0
//Content-Type: multipart/mixed;
// boundary="=====001_Dragon143666724817_====="
//
//This is a multi-part message in MIME format.
//
//--=====001_Dragon143666724817_=====
//Content-Type: text/plain;
// charset="gb2312"
//Content-Transfer-Encoding: base64
//
//t+ejrMT6usOjoQ0KoaGhoaGhoaGhoaGhoaGhodbCDQrA8aOhDQoNCg0KDQo=
//--=====001_Dragon143666724817_=====
//Content-Type: application/octet-stream;
// name="a.txt"
//Content-Transfer-Encoding: base64
//Content-Disposition: attachment;
// filename="a.txt"
//
//YmVnaW4uDQq+rbOjzP28+7HwyMvLtcPmz/K21M/ztcSzzNDyyei8xqOs0tTHsNTa0afQo8nPv861
//xMqxuvKjrNKy09C/qsPmz/K21M/zs8zQ8snovMbV4sPFv86how0KZW5kLg==
//
//--=====001_Dragon143666724817_=====--
//
//.
// 250 Mail OK queued as smtp1,ClUQrLD7QDckxyJJytpKCg--.23130S2 1227015973
senddata(
"Date: Tue, 23 Nov 2008 21:44:01 +0800\r\n"
"From: \"58619042\" <58619042@qq.com>\r\n"
"To: \"cradio\" <cradio@yeah.net>\r\n"
"Subject: =?gb2312?B?uL28/g==?=\r\n"
"Message-ID: <200811182144008127934@yeah.net>\r\n"
"X-mailer: Foxmail 6, 10, 201, 20 [cn]\r\n"
"Mime-Version: 1.0\r\n"
"Content-Type: multipart/mixed;\r\n"
" boundary=\"=====001_Dragon143666724817_=====\"\r\n"
"\r\n"
"This is a multi-part message in MIME format.\r\n"
"\r\n"
"--=====001_Dragon143666724817_=====\r\n"
"Content-Type: text/plain;\r\n"
" charset=\"gb2312\"\r\n"
"Content-Transfer-Encoding: base64\r\n"
"\r\n"
"t+ejrMT6usOjoQ0KoaGhoaGhoaGhoaGhoaGhodbCDQrA8aOhDQoNCg0KDQo=\r\n" // 信件内容(Basi64编码)
"--=====001_Dragon143666724817_=====\r\n"
"Content-Type: application/octet-stream;\r\n"
" name=\"a.txt\"\r\n"
"Content-Transfer-Encoding: base64\r\n"
"Content-Disposition: attachment;\r\n"
" filename=\"a.txt\"\r\n"
"\r\n"
"YmVnaW4uDQq+rbOjzP28+7HwyMvLtcPmz/K21M/ztcSzzNDyyei8xqOs0tTHsNTa0afQo8nPv861\r\n" // 附件数据(Basi64编码)
"xMqxuvKjrNKy09C/qsPmz/K21M/zs8zQ8snovMbV4sPFv86how0KZW5kLg==\r\n"
"\r\n"
"--=====001_Dragon143666724817_=====--\r\n"
".\r\n"
);
}
if (recvdata() != 250)
return 0;
//QUIT
// 221 Bye
senddata("QUIT\r\n"); // 我收工罗
recvdata();
return 1;
}
int main(int argc, char* argv[])
{
/*
// Base64 解码
char src[] = "dXNlcm5hbWU6"; // "dXNlcm5hbWU6"解码后就是"username:"
unsigned char dest[1024]={0};
int x = Base64Decode(dest, src);
dest[x] = 0;
printf("%s\n", dest);
return 0;
*/
/*
// Base64 编码
const char src[] = "58619042"; // "58619042"编码后得"NTg2MTkwNDI="
char s[1024]={0};
int x=strlen(src);
x = Base64Encode(s, (const unsigned char *)src, x);
s[x] = 0;
printf("%s\n", s);
return 0;
*/
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
// 创建socket
SockFD = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(SockFD == INVALID_SOCKET)
{
printf("Failed socket() \n");
return 0;
}
// 发送邮件
if (sendemail())
puts("ok");
else
puts("failed!!!");
// 关闭socket
closesocket(SockFD);
WSACleanup();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -