PDA

Ver la Versión Completa : Archivos adjuntos en mail


Cecilio
27-10-2007, 11:05:24
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:

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
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...


procedure AddAttachment;
begin
if OpenDialog1.Execute then
begin
TIdAttachment.Create(IdMsgSend.MessageParts, OpenDialog1.FileName);
ResetAttachmentListView;
end;
end;


Aqui como lo gestionan...


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
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:

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:

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
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.