PDA

Ver la Versión Completa : Enviar correo desde Lazarus


reevil
01-05-2013, 21:36:11
A modo de contexto les comento que estoy trabajando con Lazarus (CodeTyphon en su ultima versión) sobre Manjaro 64bit (GNU/Linux).

La aplicación funciona correctamente en lo que al manejo de la base de datos se refiere, pero cuando trato de enviar un correo utilizando los componentes Indy (idSMTP, idMessage) que son con lo que acostumbraba a hacer esto desde C++ Builder (varias versiones, la ultima en que lo probé y funciono era la XE2).

Tengo este pequeño ejemplo en el que trato de hacerlo lo mas básico que puede (sin archivos adjuntos, indicando incluso en que Form están los componentes...)


//SMTP es un idSMTP y Mensaje un idMessage.
begin
Form1.SMTP.Host:='mail.dominio.com';
Form1.SMTP.Port:=25;
Form1.SMTP.AuthType:=satDefault;
// Form1.SMTP.AuthType:=satSASL; // no lo solicita el servidor.
Form1.Mensaje.From.Address := 'nombre@servidor.com';
Form1.Mensaje.Recipients.EMailAddresses := 'nombre@servidor.com';
Form1.Mensaje.Subject:='Subject';
Form1.Mensaje.Body.Text:='Body';
try
try
Form1.SMTP.Connect;
Application.processmessages; // comentando esta linea tampoco me funciona.
Form1.SMTP.Send(Form1.Mensaje) ;
except on E:Exception do
ShowMessage('Error al enviar');
end;
finally
if Form1.SMTP.Connected then
Form1.SMTP.Disconnect;
end;
end;


Ahora el problema es que al momento de compilar no me marca error y al ejecutar el procedimiento simplemente no pasa nada, no me regresa ningún mensaje, así que no tengo pistas de donde pueda estar el problema.

reevil
01-05-2013, 21:42:36
Algún moderador que me ayude a corregir el mensaje? :o
Algo me fallo al querer resaltar el código y ahora no puedo editarlo.

reevil
02-05-2013, 10:21:31
Después de unas horas batallando me di por vencido con las INDY y opte por Synapse.
uses
SMTPSend, MIMEPart, MIMEMess;
procedure TForm.SendEmailClick(Sender: TObject);
var
MIMEText: TStrings;
MIMEPart: TMimePart;
MIMEMessage: TMimeMess;
begin
MIMEText := TStringList.Create;
MIMEText.Add('Hello,');
MIMEText.Add('here is the text of your e-mail message,');
MIMEText.Add('if you want the HTML format, use AddPartHTML');
MIMEText.Add('or e.g. AddPartHTMLFromFile if you have your');
MIMEText.Add('HTML message content in a file.');
MIMEMessage := TMimeMess.Create;
with MIMEMessage do
try
Header.Date := Now;
Header.From := 'sender@from.com';
Header.ToList.Clear;
Header.ToList.Add('recipient@to.com');
Header.CcList.Clear;
Header.Subject := 'E-mail subject';
Header.XMailer := 'My mail client name';
MIMEPart := AddPartMultipart('mixed', nil);
AddPartText(MIMEText, MIMEPart);
AddPartBinaryFromFile('c:\voucher.pdf', MIMEPart);
EncodeMessage;
if SendToRaw(Header.From, // e-mail sender
Header.ToList.CommaText, // comma delimited recipient list
'smtp.server.com', // SMTP server
Lines, // MIME message data
'login', // server authentication
'password') // server authentication
then
ShowMessage('E-mail has been successfuly sent :)')
else
ShowMessage('E-mail sending failed :(');
finally
Free;
MIMEText.Free;
end;
end;

Añadiendo las librerías y con las modificaciones para adaptarlo a mis necesidades, va perfecto ese código.

Lo encontré aquí: http://stackoverflow.com/questions/6765008/send-an-email-with-attachment-client-agnostic

pedrolazarus
02-05-2013, 19:40:10
Después de unas horas batallando me di por vencido con las INDY y opte por Synapse.
Código Delphi [ (http://www.clubdelphi.com/foros/#)

Añadiendo las librerías y con las modificaciones para adaptarlo a mis necesidades, va perfecto ese código.

Lo encontré aquí: http://stackoverflow.com/questions/6765008/send-an-email-with-attachment-client-agnostic

Bueno de una pregunta paso a un aporte :), se agradece.

reevil
03-05-2013, 06:53:01
Es de lo que se tratan los foros, pero parece que a la gran mayoría se les olvida.
Al resolver al problema hay que poner la solución.
Saludos.