Jump to content


Photo

Mandar email con adjunto


  • Please log in to reply
11 replies to this topic

#1 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 posts
  • LocationEspaña

Posted 03 March 2014 - 11:37 AM

Hola compañeros, podíais facilitarme el trozo de código que manda un email con un adjunto, lo tenia, pero un virus ataco a mi equipo y he perdido un montón de cosas

he probado con un montón de códigos y los mensajes de error son de lo mas diversos y no he logrado sacar ni un triste email y llevo horas y nada, asi que prefiero solicitar ayuda, antes de que me duela más la cabeza.

Lo que quiero hacer por si os vale de ayuda, es lo siguiente.

1º) se selecciona si quiero mandar un email (ok)
2º) si es así, crea del documento un archivo Pdf (oK)
3º) Paso los datos a un formulario para mandar el email, los datos son:
El email ,El asunto, la ruta del archivo, el nombre del archivo y el cuerpo del mensaje
Para llegar a este paso el cliente debe tener email (ok todo)
4) Pulso el botón mandar email, aquí lo primero que hace es comprobar si debemos mandar el texto de la ley de protección de datos (mediante un simple checkbox OK)
coge nuestros datos de la bd. configuración, Nombre de usuario, Email, Servidor en este caso 'smtp.gmail.com' y por último la contraseña (ok)
Y aquí es donde falla, salir el email

Como siempre siempre agradezco vuestra ayuda
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14469 posts
  • LocationMéxico

Posted 03 March 2014 - 12:07 PM

Hola amigo,

A ver si te sirve ésto de nuestro amigo poliburro.

http://elpoli.delphi...das-con-delphi/

Saludos
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14469 posts
  • LocationMéxico

Posted 03 March 2014 - 12:09 PM

O algo de nuestro gran amigo seoane

http://delphi.jmrds.com/?q=node/69

Saludos
  • 0

#4 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 posts
  • LocationEspaña

Posted 04 March 2014 - 03:26 AM

Hola Egostar agradezco tu ayuda, pero no logro que tire, el error que más me sale es

Imagen Enviada

e puesto un componente IdSSLIOHandlerSocketOpenSSL vinculado a mi IDSMTP y la propiedad UseTLS en sus diferentes modos y nada, la verdad es que  me tiene totalmente parado ya que es una parte fundamental en el trabajo que estoy haciendo, así que os pido ayuda nuevamente

Así es como paso los datos

Imagen Enviada

Y así es el form en diseño con los componentes que veis únicamente

Imagen Enviada
  • 0

#5 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 posts
  • LocationEspaña

Posted 04 March 2014 - 04:26 AM

siguiendo dando vueltas al tema, he vuelto a la función que se que me funciona, que es

procedure TForm1.Button1Click(Sender: TObject);
function EnviarEmail(aData, aHora : TDateTime; aHost, aLogin, aSenha,aListaEmail, aAssunto, aCorpo : String; Mifile:string) : Boolean;
var
  IdSMTP    : TIdSMTP;
  IdMessage : TIdMessage;
  Cabecalho: string;
begin
  Cabecalho:= '';
  Result:= False;
  IdSMTP    := TIdSMTP  .Create(nil);
  IdMessage := TIdMessage.Create(nil);
  try
    IdSMTP.Host:= aHost;
    IdSMTP.AuthType:= satDefault;
    IdSMTP.Username:= aLogin;
    IdSMTP.Password:= aSenha;
    IdSMTP.Connect;

    IdMessage.From.Address:= aLogin;
    IdMessage.Recipients.EMailAddresses:= aListaEmail;
    IdMessage.Subject:= aAssunto;
    IdMessage.Body.Text:='Data: '+DateToStr(aData)+#13#10+'Hora: '+TimeToStr(aHora)+#13#10+ aCorpo;
    IdMessage.MessageParts.Clear;
    if Mifile<>'' then TIdAttachmentFile.Create(IdMessage.MessageParts,Mifile);
    try
      IdSMTP.Send(IdMessage);
    except
      on E: Exception do
        begin
          MessageDlg('Error al intentar enviar este correo '+#13#10+e.Message,mtWarning,[mbok],0);
          Exit;
        end;
    end;
  finally
    IdSMTP  .Disconnect;
    IdSMTP  .Free;
    IdMessage.Free;
  end;
  Result:= True;
end;

begin                      //Servido Email    Correo Origen  //Clave Origen    Correo Destino          Asunto    Mensaje

//    EnviarEmail(Date,Time, 'smtp.eresmas.com','Desart@eresmas.com','xxx', 'info@jl68.es','Evido de email','Enviando email via programa��o utilizando os recursos da poderosa paleta indy',fichero);
    EnviarEmail(Date,Time, 'smtp.eresmas.com','Desart@eresmas.com','xxx', Edit1.text,Edit2.Text,Memo1.Lines.Text,fichero);
end;


a esta le he añadido para adjuntar ficheros  en mifile con esta única linea

  if Mifile<>'' then TIdAttachmentFile.Create(IdMessage.MessageParts,Mifile);


y me sale el error

Imagen Enviada

que como veis es totalmente diferente, en cambio si lo mando  sin fichero, funciona perfectamente, siempre y cuando no lo mande desde una cuenta Gmail, en la que me da el error antes comentado.
  • 0

#6 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 04 March 2014 - 07:24 AM


Imagen Enviada

que como veis es totalmente diferente, en cambio si lo mando  sin fichero, funciona perfectamente, siempre y cuando no lo mande desde una cuenta Gmail, en la que me da el error antes comentado.


Igual es una chorrada... pero ¿te has fijado que las comillas del nombre de fichero se cierran en la siguiente línea del mensaje de error?

Igual MiFile lleva un chr(10) al final o algo del estilo.
  • 0

#7 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 posts
  • LocationEspaña

Posted 04 March 2014 - 08:07 AM

Hola Sergio, no creo que ese sea el problema, pero probare,  lo cargo para estar seguro con un openDialog y e probado con un archivo simple en el raiz la ruta es 'c:\1.txt' directamente y ni así funciona
  • 0

#8 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 04 March 2014 - 03:52 PM

Quizás espere el fichero en otro "formato", igual que OpenOffice que tienes que convertir la ruta en URL.

Prueba con algo como 'file://c:/1.txt' en formato de URL, a ver si así le gusta, y prueba con los \ de la ruta cambiados y sin cambiar, es decir, si el primero falla, prueba con 'file://c:\1.txt' y cruza los dedos.

En la ayuda del componente debería darte más pista de estas cosas, pero no tengo yo esos componentes en D7 creo.
  • 0

#9 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 05 March 2014 - 06:48 AM

Tienes las librerias (dll) necesarias para poder utilizar ssl con gmail???
  • 0

#10 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 posts
  • LocationEspaña

Posted 06 March 2014 - 02:16 AM

hola buenos días y gracias por vuestras respuestas. lo he seguido intentando, pero no hay manera en cuanto alas Dll, he bajado las siguientes

librery32dll y ssleay32.dll de la web http://indy.fulgan.com/SSL/, se supone que son para Windows 64 y mis indi son los 10.5.5, en cuanto a cargar las Dll, me he limitado a soltarlas en el directorio del programa y no he usado la tipica linea de código

stdcall; external 'xxx.dll';


para llamarlas, ya que no veo que se haga en ninguno de los ejemplos aportados, puede que hay ocurra mi error, pero si es asi, en que proceso las llamo y son las librerias correctas
  • 0

#11 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 posts
  • LocationEspaña

Posted 06 March 2014 - 02:41 AM

Por si estuviera algo mal voy a poner como tengo configurado los componentes

Imagen Enviada

y este es el código que estoy usando

with IdMessage do
  begin

    Body.Clear();
    Recipients.Clear();
    Sender.Address := xxxxx@gmail.com';
    Recipients.EMailAddresses := xxx@xxx.es';
    Subject := edit2.Text;  El asunto
    Body.AddStrings(Memo1.Lines);
    Adjunto:=Edit3.Text+Edit4.Text;
    ShowMessage('['+Adjunto+']');

    if FileExists(Adjunto) then
      with TIdAttachmentFile.Create(MessageParts,Adjunto) do
      begin
          ContentType := 'binary';
      end

  end;

  with IdSMTP do
  begin

    IOHandler := IdSSLIOHandlerSocketOpenSSL1;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv23; // sslv : SSLv2, SSLv3, TLSv1, SSLv23.
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [];
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyDepth := 0;
    Port := 465;
    Host := 'smtp.gmail.com';
    AuthType := satDefault;
    Username := 'xxxxxxx@gmail.com';
    Password := 'xxxxxxxx';

    try
        Connect;
    except
        raise Exception.Create('Error de Conexión');
    end;

//    btnEnviarEmail.Enabled := false;
//    try
//        Send(IdMessage);
//        ShowMessage('Correo enviado con éxito');
//    finally
//        btnEnviarEmail.Enabled := true;
//    end;

    if Connected then
        Disconnect();

  end;


  • 0

#12 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 posts
  • LocationEspaña

Posted 06 March 2014 - 02:45 AM

Este me sigue pidiendo es las Ssl, se me olvido comentarlo antes

P.D. y ahora me hago un par de preguntas y cuando funcione, si en vez de mandarlo por Gmail, lo manda por una cuenta diferente, el código seguiría valiendo o habría que cambiarlo todo.


Como podéis ver no os he mentido, cuando digo que estoy verde en muchos aspectos e internet y sus comunicaciones es uno de mis puntos más débiles

  • 0




IP.Board spam blocked by CleanTalk.