//---------------------------------------------------------------------------// _Leo Software '2003 //---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstop#include <memory>#include "Unit1.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TForm1::EnviarComando(String cmd, int resp, bool cr){ memoConversacion->Lines->Add(">> " + cmd); if (cr) Powersock1->Writeln(cmd); else Powersock1->Write(cmd); String respuesta; do { respuesta = Powersock1->ReadLn(); memoConversacion->Lines->Add("<< " + respuesta); if (respuesta.Pos(resp) != 1) throw Exception("Error :: " + cmd); } while (respuesta[4] == '-');}//---------------------------------------------------------------------------String __fastcall TForm1::CodificarBase64(String str){ std::auto_ptr<TStringStream> is(new TStringStream(str)); std::auto_ptr<TStringStream> os(new TStringStream("")); NMUUProcessor1->InputStream = is.get(); NMUUProcessor1->OutputStream = os.get(); NMUUProcessor1->Method = uuMime; NMUUProcessor1->Encode(); return os->DataString;}//---------------------------------------------------------------------------void __fastcall TForm1::EnviarCorreo(String smtp, String usuario, String clave, String de, String para, String asunto, String mensaje){ Powersock1->Host = smtp; Powersock1->Port = 25; if (Powersock1->Connected) Powersock1->Disconnect(); Powersock1->Connect(); if (!Powersock1->Connected) throw Exception("No se pudo conectar"); String respuesta = Powersock1->ReadLn(); memoConversacion->Lines->Add(respuesta); if (respuesta.Pos("220") != 1) throw Exception("Error al conectar"); EnviarComando("ehlo " + usuario); EnviarComando("rset"); EnviarComando("auth LOGIN", 334); EnviarComando(CodificarBase64(usuario), 334, false); EnviarComando(CodificarBase64(clave), 235, false); EnviarComando("mail from:" + de); EnviarComando("rcpt to:" + para); EnviarComando("data", 354); String cabecera = "Subject: " + asunto + "\r\n" "To: " + para + "\r\n" "From: " + de + "\r\n"; EnviarComando(cabecera + "\r\n" + mensaje + "\r\n."); EnviarComando("Quit", 221); Powersock1->Disconnect();}//---------------------------------------------------------------------------void __fastcall TForm1::btnEnviarClick(TObject *Sender){ try { btnEnviar->Enabled = false; EnviarCorreo(edtServidor->Text, edtUsuario->Text, edtClave->Text, edtDeNombre->Text + "<" + edtDeCorreo->Text + ">", edtParaNombre->Text + "<" + edtParaCorreo->Text + ">", edtAsunto->Text, memoMensaje->Text); } __finally { btnEnviar->Enabled = true; }}//---------------------------------------------------------------------------