Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Archivos adjuntos en mail (https://www.clubdelphi.com/foros/showthread.php?t=49701)

Cecilio 27-10-2007 11:05:24

Archivos adjuntos en mail
 
Hola a todos.

He creado un pequeño programa que envia e-mail. hasta el momento todo iba bien.

Se me ocurrió poder agregar aduntos que pongo en una ListBox, pero no va:
Código:

    for I := 0 to adjunto.Items.Count - 1 do
      begin
        if Fileexists(adjunto.Items[i]) then
          tIdAttachment.Create(idMessage.MessageParts , adjunto.Items[i]);

      end;

El problema es que me dice que hay demasiados parámetros en el create.
En uses he tenido que agregar a mano IdAttachment porque no me reconcia TidAttachment

Mensajes de error:
[DCC Error] MMail.pas(142): E2034 Too many actual parameters
y
[DCC Warning] MMail.pas(142): W1020 Constructing instance of 'TIdAttachment' containing abstract method 'TIdAttachment.OpenLoadStream'

El primero lo entiendo el segundo no. Puede que no esté bien declarado en Uses ? o ¿ hay que agregar algun componente más ?

fide 28-10-2007 03:29:43

Eniar archios adjuntos...
 
Bueno, aqui te mando el codigo que utiliza el demo de la Indy de nombre MailClient para adicionar adjuntos al tidMessage...

Ha, esto es con la Indy 9...

Aqui la forma en que agregan un adjunto...

Código Delphi [-]
procedure AddAttachment;
begin
   if OpenDialog1.Execute then
      begin
         TIdAttachment.Create(IdMsgSend.MessageParts, OpenDialog1.FileName);
         ResetAttachmentListView;
      end;
end;

Aqui como lo gestionan...

Código Delphi [-]
procedure ResetAttachmentListView;
var li: TListItem;
   idx: Integer;
begin
   lvFiles.Items.Clear;
   for idx := 0 to Pred(IdMsgSend.MessageParts.Count) do
      begin
         li := lvFiles.Items.Add;
         if IdMsgSend.MessageParts.Items[idx] is TIdAttachment then
            begin
               li.ImageIndex := 0;
               li.Caption := TIdAttachment(IdMsgSend.MessageParts.Items[idx]).Filename;
               li.SubItems.Add(TIdAttachment(IdMsgSend.MessageParts.Items[idx]).ContentType);
            end
         else
            begin
               li.ImageIndex := 1;
               li.Caption := IdMsgSend.MessageParts.Items[idx].ContentType;
            end;
      end;
end;

Espero esto te sirva, de todos modos puedes descargar los demos de la pagina de la Indy, para que te documentes mas okas...

Cecilio 28-10-2007 10:45:23

Yo uso las que vienen con Delphi 2007

Ese procedimiento que me envias lo ejecuto y me da los errores que describia.

Por cierto cual es la web de las Indy ?

fide 29-10-2007 04:07:03

Cita:

Empezado por Cecilio (Mensaje 241793)
Yo uso las que vienen con Delphi 2007

Ese procedimiento que me envias lo ejecuto y me da los errores que describia.

Por cierto cual es la web de las Indy ?

Bueno, puedes buscar la pagina en el google, aunque creo que es
http://www.indyproject.org

Cecilio 29-10-2007 19:42:49

No consigo que funcione de ninguna forma.

¿ Alguna idea ? está en Delphi 2007 No se que versión será de las Indy

Estoy por intentarlo en Delphi 7 a ver si funciona.

Voy a poner el trozo de código por si a caso:
Código:

with idMessage do begin
    // Cuerpo del mensaje.
    Body.Clear;
    Body.Assign(texto.Lines);
    ContentType := 'text/html';
    // Cuenta Origen.
    From.Name:=config.enombre.Text;
    From.address := config.eusuario.Text;
    ReplyTo.EMailAddresses:=config.erespuesta.Text;
    // Asunto del email.
    Subject := edit1.Text;
    // Prioridad del mensaje, ALTA.
    Priority := TidMessagePriority(mpHighest);
    // Coloco el archivo adjunto el cual enviar.

    //TidAttachment.Create(idMensage.MessageParts,ARCHIVOADJUNTO);
    for I := 0 to adjunto.Items.Count - 1 do
      begin
        if Fileexists(adjunto.Items[i]) then
          tIdAttachment.Create(MessageParts, adjunto.items[i]);


      end;
    end;

Los Uses:
Código:

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, IdMessage, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient,
  IdSMTPBase, IdSMTP,IdAttachment, Menus, ExtCtrls;

El IdAttachment lo agregue yo en los Uses, porque no estaba y no lo reconocia.

fide 29-10-2007 21:10:01

Enviar archivos...
 
Oyeme. Todo eso que pones esta muy bien y no se por que da error. Mira, por que no haces eso en delphi 7 que es donde yo se que no te va a dar error he???

jachguate 30-10-2007 02:35:20

Seguramente estas usando Indy 10.

Lo digo de memoria... pero la clase TidAttachment se convirtió en una clase abstracta... ahora debe haber una clase TidFileAttachment, para el caso de los adjuntos que se originan en un archivo del sistema.

Hasta luego.

;)

caio 06-11-2007 16:11:48

La clase se llama TIdAttachmentFile. Lo probe y funciona perfectamente. En el uses hay que agregar IdAttachmentFile.


La franja horaria es GMT +2. Ahora son las 06:45:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi