PDA

Ver la Versión Completa : Cómo puedo enviar a múltiples destinatarios un email conteniendo HTML


Cecilio
11-10-2007, 11:47:25
Hola a todos.

Necesito crear un programa que envie un página html guardada en disco a una lista determinada de destinatarios.

el problema es que no se bien ni como empezar.

¿ alguna ayuda de componentes ? o bien un ejemplo simple.

Gracias.

dec
11-10-2007, 11:55:45
Hola,

Empieza por buscar en estos foros. Encontrarás información seguro, porque es un tema que se ha tratado en más de una ocasión.

PD. Un poco de paciencia al escribir el título de los hilos, por favor.

Cecilio
11-10-2007, 11:59:31
Gracias Dec

He buscado en el foro antes de escribir, y tras ver varias páginas no encontré nada que me ayudara.

Gracias tambien por modificarme el título, y disculpas.

dec
11-10-2007, 12:05:20
Hola,

Pues es raro. Yo acabo de buscar "enviar email html" y me aparecen varios resultados. Y todavía podría afinarse un poco más buscando "email indy", sólo "enviar email", "enviar correo", etc., etc.

Cecilio
13-10-2007, 11:51:29
Hola Dec.

Si, finalmente lo encontré. Lo estaba buscando mal.

Ya tengo una pequeña aplicación que me envía los e-mail a la lista dir. que exporto desde Thuderbird.

Mi problema actual es el siguiente. Quiero enviar un email con un contenido html que tambien he exportado desde Thunderbir, usando una plantilla.

Pero al recibir el emal (enviado con mi aplicación y componentes Indy) ve el código html en vez el email normal.

Estoy buscando en el componente TIdMessage y no veo como modificarlo para que no se vea el código html.

¿ alguna idea ?

dec
13-10-2007, 13:08:29
Hola,

El siguiente código lo extraigo de un ejemplo que guardo por aquí con el nombre "Enviar correos HTML con imágenes", más o menos. A ver si te sirve para hacerte una idea. El asunto principal es el "ContentType" del mensaje de correo. Pero, piensa que el cliente de correo que lo reciba ha de admitir el HTML. Por ejemplo, el que yo uso no lo admite, sólo ve texto plano (afortunadamente) y así hay mensajes que ni veo...

Pero fíjate que el código siguiente muestra la que quizá sea la forma adecuada de hacerlo: enviar el correo en texto plano y en HTML, de modo que el cliente pueda elegir, o, por lo menos, no quedarse sin mensaje si no puede leer HTML.


uses
idMessage;

procedure TForm1.Button1Click(Sender: TObject);
var
html: TStrings;
htmpart, txtpart: TIdText;
bmppart: TIdAttachment;
email: TIdMessage;
filename: string;
begin
filename := ExtractFilePath(Application.ExeName) + 'us.jpg';

html := TStringList.Create();
html.Add('< html >');
html.Add('< head >');
html.Add('< /head >');
html.Add('< body >< h1 >Hello< /h1 >');
html.Add('< img src="cid:us.jpg" / >');
html.Add('This is a picture of us!</body>');
html.Add('< /html >');

email := TIdMessage.Create(nil);
email.From.Text := 'jhondoe@jhondoe.com';
email.Recipients.EMailAddresses := 'jhondoeson@jhondoeson.com';
email.Subject := 'Hello';
email.ContentType := 'multipart/mixed';
email.Body.Assign(html);

txtpart := TIdText.Create(email.MessageParts);
txtpart.ContentType := 'text/plain';
txtpart.Body.Text := '';

htmpart := TIdText.Create(email.MessageParts, html);
htmpart.ContentType := 'text/html';

bmppart := TIdAttachment.Create(email.MessageParts, filename);
bmppart.ContentType := 'image/jpeg';
bmppart.FileIsTempFile := true;
bmppart.ContentDisposition := 'inline';
bmppart.ExtraHeaders.Values['content-id'] := 'us.jpg';
bmppart.DisplayName := 'us.jpg';

try
idSMTP.Connect();
try
idSMTP.Send(email);
ShowMessage('Sent');
except
on E: Exception do
ShowMessage('Failed: ' + E.Message);
end;
finally
idSMTP.Disconnect();
email.Free();
html.Free();
end;
end;


Nota: Fíjate que el HTML que aparece en el código tiene etiquetas "con espacios". Esto es sólo para que se vea bien el código en los foros, en realidad las etiquetas no llevan espacios.

smessina
29-09-2008, 22:55:09
Hola perdon por retrotraerlos a este post, pero necesito mandar un mail con imagenes, para lo que entiendo que debo mandarlo en formato html, lo que dice este post me sirvio en su momento para mandarlo con las indy pero yo necesito mandarlo por outlook 2003, y no me queda claro como se haria, le pongo el codigo que yo uso

html := TStringList.Create();
html.Add('<html>');
html.Add('<head>');
html.Add('</head>');
html.Add('<body><h1>Lo que sea</h1>');
html.Add('<img src="cid:imagen.jpg" />');
html.Add('</html>');

Outlook := CreateOleObject('Outlook.Application');


miMail := Outlook.CreateItem(olMailItem);
miMail.Recipients.Add('smessina@dcom.com.ar');
miMail.Subject := 'Mensaje de Prueba';


// alternatively send an HTML email (not in Outlook 97)
miMail.HTMLBody := html.Text;

miMail.Attachments.Add(camino+'imagen.jpg');
miMail.Send;


pero me llega el mail sin la imagen por lo que creo que me faltaria definir esta parte :

htmpart := TIdText.Create(email.MessageParts, html);
htmpart.ContentType := 'text/html';

bmppart := TIdAttachment.Create(email.MessageParts, filename);
bmppart.ContentType := 'image/jpeg';
bmppart.FileIsTempFile := true;
bmppart.ContentDisposition := 'inline';
bmppart.ExtraHeaders.Values['content-id'] := 'us.jpg';

bmppart.DisplayName := 'us.jpg';


pero no se como aplicarlo a mi codigo para poder mandarlo por outlook.


Gracias por su tiempo.

Santiago.