PDA

Ver la Versión Completa : Acerca de enviar texto con formato...


JuanBCT
23-02-2005, 21:03:01
Hola! Después de mucho probar y averiguar; logré enviar un correo electrónico desde mi aplicación (cosa q explico acá (http://www.clubdelphi.com/foros/showthread.php?t=18643)). Esto funciona muy bien cuando se manda texto plano, pero los problemas comienzan a surgir al querer mandar texto con formato... el cuerpo de mi mensaje es un TDbRichEdit al cual le puedo cambiar tamaño y tipo de letra. ¿Alguien sabría como se hace para convertir este texto en un formato q guarde esas propiedades?

Leí en algún lugar que los mails como los que leemos en el Outlook están en formato HTML, pero hice la prueba de mandar el código completo de una página a mi cuenta y no lo interpretó, me mostró el código tal cual lo mandé. También leí en un hilo la posibilidad de mandar un .html como adjunto... el tema es que, si bien en webmails como el de yahoo uno abre el mensaje y vé inmediatamente el contenido del .html; en Outlook Express habría que clickear el icono de Adjunto, abrirlo... en fin.

Voy a estar muy agradecido si alguien me puede ayudar con esto, saludos!!

JuanBCT
25-02-2005, 17:43:16
Se q esto se ha preguntado antes; pero busco y busco y no encuentro nada q al menos me dé una pauta de como hacerlo... no habrá algún alma caritativa q eche un poco de luz sobre esto? :(

marto
25-02-2005, 17:49:00
Wop!

Respecto a cómo mantener el formato... ni idea. Respecto a lo del HTML, para que cualquier cliente de correo lo interprete correctamente tienes que indicar que es html en el content-type del mail.

JuanBCT
04-03-2005, 15:23:24
Hola Marto, gracias por tu respuesta... al menos en mi versión de Indy en ContentType hay que poner 'text/html'; creo q también habría q especificar IdMessage1.IsEncoded:=true...
Lo probé copiando un código HTML y funciona perfecto... ahora bien, no queda otra solución que convertir yo el rtf a HTML; o habrá algún componente tipo "HTMLEdit"? :rolleyes:

marto
04-03-2005, 16:08:11
Mirate las Jedi, en la paleta Jv Internet trae componentes para trabajar con HTML, pero no sé la potencia que tienen

JuanBCT
07-03-2005, 17:48:06
Finalmente logré enviar el mensaje; explico acá lo que hice por si le sirva a alguien...

1) Guardo el contenido del cuerpo en un archivo RTF temporal

Datamodule1.MailsCuerpo_Mail.SaveToFile('C:\WINDOWS\EMKTMP.RTF');


2) Convierto el RTF en HTML (lo hice con una rutina freeware q encontré en Torry.net)

3) Leo el HTML y lo cargo en un RichEdit invisible:

try
Archiv.LoadFromFile('C:\WINDOWS\EMKTMP.HTM');
for A:=0 to Archiv.Count -1 do
begin
SS:=archiv.Strings[A];
richedit1.Lines.Add(SS);
end;
finally
Archiv.Free;
end;


4) Mando el mail, y en el Body le asigno el texto del RichEdit invisible:

//Seteando propiedades del SMTP
IdSMTP1.Host:=DbEdit6.Text;
IdSMTP1.Port:=25;
//Seteando propiedades del mensaje
IdMessage1.From.Address:=DbEdit7.Text;
IdMessage1.Subject:=DbEdit5.Text;
IdMessage1.Body.Text:=RichEdit1.Text;
//Envío el mensaje
try
try
IdSMTP1.Connect(1000);
IdSMTP1.Send(IdMessage1);
except on E:Exception do
ShowMessage ('Error. Chequee las direcciones en "Configuración de cuenta".');
end;
finally
if IdSMTP1.Connected then IdSMTP1.Disconnect;
ShowMessage ('Mensaje enviado.');
end;


Listo!

JuanBCT
07-03-2005, 17:50:19
Perdón, en 3), antes de Archiv.Free; iría esto:

richedit1.Lines.Add('');
richedit1.Lines.Add('</BODY>');
richedit1.Lines.Add('</HTML>');

ContraVeneno
30-09-2005, 23:50:54
a mi me sirvió, Gracias :D

ContraVeneno
11-10-2005, 00:17:22
2) Convierto el RTF en HTML (lo hice con una rutina freeware q encontré en Torry.net) ¿me podrías pasar esa rutina?
Lo que hiciste me resolvió un problema, pero con la conversión que hacía, me surgen más y más problemas. He tratado de buscar esa rutina que mencionas, pero no he podido encontrarla. Si fueras tan amable de facilitármela te lo agradecría mucho.

JuanBCT
17-10-2005, 20:08:58
Hola Contraveneno, disculpa que no había visto antes tu mensaje. Acá está la rutina en cuestión... http://www.torry.net/quicksearchd.php?String=RTF+2+HTML+Converter&Title=Yes

... en realidad solo usé r2hconv.pas, lo incluí en el proyecto y lo llamé así:

r2hconv.rtf2html('C:\WINDOWS\EMKTMP.RTF', 'C:\WINDOWS\EMKTMP.HTM',['']);

(no sé si el autor permite usar el archivo por separado, pero bueno... me tomé esa libertad)

Espero que te sirva, saludos!

ContraVeneno
17-10-2005, 20:23:48
No hay problema JuanBCT, la paciencia no es una de mis virtudes, pero entiendo que se atravesó el fin de semana, en fin, no hay problema con eso.

Con la rutina que mencinoas, ya me fuinconó perfecto. Y yo tambien solo utilizé esa unidad, digo, es lo único que necesito ;) .

Muchas Gracias.

Phantom_Drake
27-06-2007, 20:41:58
yo intente utilizando ese codigo pero a mi correo me llego puro codigo html y nada de formato podrian ser un poco mas esplicitos por favor :o

ContraVeneno
27-06-2007, 23:23:52
Uses r2hconv

....
procedure Tfrm.EnviaCorreoClick(Sender: TObject);
var strOrigen: string;
begin
inherited;
redtMail.lines.SaveToFile('c:\temp.rtf');
r2hconv.rtf2html('c:\temp.rtf', 'c:\temp.htm', ['']);
redtHTML.Lines.LoadFromFile('c:\temp.htm');
redtHTML.Lines.Add('</BODY>');
redtHTML.Lines.Add('</HTML>');
//leve verificación sobre el fomato de la dirección escrita
if trim(edtMail0.text)='' then begin
messagebox(Handle,'No ha escrito la dirección de correo del destinatario seleccionado.'+#13+'Correo No enviado.',
'Error', MB_ICONError); Exit;
end else begin
if not ExecRegExpr('[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+',
edtMail0.Text) then begin
messagebox(Handle,'La dirección escrita no es una dirección de correo válida.'+#13+'Correo No enviado.',
'Error', MB_ICONError);
exit;
//verificación sobre la segunda dirección
if trim(edtMail1.text)<>'' then
if not ExecRegExpr('[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+',
edtMail1.Text) then
edtMail1.text:='';
end; //if not execregexpr
end; //if trim mail0
//Enviar el mail despues de guardar los datos
frm.SMTP.Host:=Host;
frm.SMTP.UserId:=Usuario;
strOrigen:=strOrigen;
frm.SMTP.Port:=25;
with frm.SMTP do begin
try
try
Connect;
except on E:Exception do begin
messagebox(Handle,'No se pudo establecer la conexión.'
,'Error.',MB_oK+MB_ICONERROR);
end; //fin except
end; // fin try - except
finally
if Connected then begin
PostMessage.FromAddress:=strOrigen;
PostMessage.ToAddress.Text:=edtMail0.Text;
if edtMail1.Text<>'' then
PostMessage.ToCarbonCopy.Text:=edtmail1.text;
with PostMessage.Body do begin
Clear;
Add(redtHTML.Text);
end; //with body
PostMessage.Subject:=edtAsunto.Text;
SendMail;
Disconnect;
end;
end; //if connected
end; //fin try - finally
end; //with smtp
end;
....


usando un componente SMTP.

Aunque personalmente prefiero utilizar el método ShellExec con un comando mailto.

Más explícito que eso, no creo, pero puedes preguntar :D

Phantom_Drake
28-06-2007, 00:03:29
de hecho si tengo dudas aun :p en la linea:
if not ExecRegExpr('[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+',edtMail0.Text) then
marca error en el ExecRegExpr
a ke se debe esto??? :D

elchino_7
28-06-2007, 00:06:09
Contraveneno porq prefieres usar el shell q el smtp :confused: cuales son las ventajas y como se usaria:confused::confused::confused::confused:

ContraVeneno
28-06-2007, 00:19:11
marca error en el ExecRegExpr
a ke se debe esto??? :D

http://www.clubdelphi.com/foros/showthread.php?t=21741&highlight=RegExpr

RegExpr (http://www.regexpstudio.com/)


Contraveneno porq prefieres usar el shell q el smtp :confused: cuales son las ventajas y como se usaria:confused::confused::confused::confused:


Por que utilizando el ShellExec se abrirá el cliente predeterminado de correo. No importa si tienes Outloock, Edore, Thunderbird, etc, etc. Al utilizar este comando se abrirá el que tengas instalado en la máquina donde se ejecute.

Bueno, que el comando ShellExec se puede realizar en una sola línea de código y como puedes ver en este hilo, utilizando un SMTP tienes hacer un show solo para enviar un correo.


ShellExecute(Handle, 'open',
'mailto:SomeN@Somewhere.com?subject=MySubject&Attach=''C:\Attachment.txt''',
nil, nil, SW_SHOW)


http://www.clubdelphi.com/foros/showthread.php?t=12158

ContraVeneno
28-06-2007, 01:04:57
Contraveneno porq prefieres usar el shell q el smtp :confused: cuales son las ventajas y como se usaria:confused::confused::confused::confused:


No solicites que te respondan por correo en privado

Los problemas deben ser un proceso público y transparente, durante el cual un primer intento de respuesta puede y debería corregirse si alguien con más conocimientos percibe que la respuesta es incompleta o incorrecta. Además quién te responde obtiene parte de su recompensa al verse que son competentes y útiles a nuestra comunidad.
Cuando pides una respuesta privada, estás interrumpiendo tanto el proceso como la recompensa. No lo hagas.


Guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)


http://www.clubdelphi.com/foros/showthread.php?t=45268

Phantom_Drake
28-06-2007, 02:37:10
ah se me olvidaba gracias por la informacion :D

Phantom_Drake
02-07-2007, 20:50:38
ke onda otra vez dando lata aki :D otra duda
tengo este codigo para mandar el correo con imagen pero nomas no puedo poner la imagen de fondo en el correo solo sale despues del texto alguien me puede ayudar por favor procedure TFrm_Email.Button2Click(Sender: TObject);
var I,J,K,L:Integer;
cadena,correo:string;
Check: TcheckBox;
ChildControl: TControl;
html: TStrings;
htmpart, txtpart: TIdText;
bmppart: TIdAttachment;
email: TIdMessage;
//archiv:TStrings;
filename,ss,filename1: string;
a:Integer;
idStars: TIdAttachment;
//archiv:t;
begin
Redt_Texto.Lines.SaveToFile('C:\WINDOWS\EMKTMP.RTF');
r2hconv.rtf2html('C:\WINDOWS\EMKTMP.RTF', 'C:\WINDOWS\EMKTMP.HTM',['']);
try
RichEdit2.lines.LoadFromFile('C:\WINDOWS\EMKTMP.HTM');
for A:=0 to RichEdit2.lines.Count -1 do
begin
SS:=RichEdit2.Lines.Strings[A];
RichEdit1.Lines.Add(SS);
end;
finally
richedit1.Lines.Add('');
richedit1.Lines.Add('</BODY>');
richedit1.Lines.Add('</HTML>');
//RichEdit2.Free;
end;

if DBLookupComboBox1.Text='' then
ShowMessage('debe seleccionar un formato')
else
begin
Lst_Mails.Items.Clear;
with dtm_contactos.Qry_Correos do
begin
Close;
SQL.Clear;
cadena:='select email from contactos where grupo<''0'' ';
for I := 0 to GroupBox9.ControlCount - 1 do
if GroupBox9.Controls[i] is TCheckBox then
if TCheckBox(GroupBox9.Controls[i]).Checked then
cadena:=cadena+ ' or grupo='''+(IntToStr(i+1))+'''';
sql.Add(cadena);
Open;
First;
if Lst_Correos.Items.Count > 0 then
Lst_Mails.Items:=Lst_Correos.Items;
while not Eof do
begin
Lst_Mails.Items.Add(fieldbyname('email').AsString);
next;
end;
end;
Lst_Correos.Items.Clear;
for K:=0 to Lst_Mails.Items.Count -1 do
begin
correo:= Lst_Mails.Items.Strings[k];
CopyFile(PChar('C:\Proyecto Email\Formatos\'+ DBLookupComboBox1.text ),PChar('C:\Archivos de programa\Borland\Delphi7\Projects\'+ DBLookupComboBox1.text),TRUE);
//filename := ExtractFilePath(Application.ExeName) + '\homerorx.jpg';
//filename1 := 'C:\Proyecto Email\Formatos\'+ DBLookupComboBox1.text + '''';
filename := 'C:\Proyecto Email\Formatos\'+ DBLookupComboBox1.text ;
html := TStringList.Create();
{html.Add('<html>');
html.Add('<head>');
html.Add('</head>');
html.Add('<body bgcolor="blue"> <h1>Hello</h1>');
//html.Add('<img src="\homerorx.jpg" />');
html.Add('</body>');
html.Add('</html>');}
for L:=0 to RichEdit2.lines.Count -1 do
begin
html.Add(RichEdit2.Lines.Strings[L]);
end;
email := TIdMessage.Create(nil);
email.From.Text := 'origen' ('israel_bermejo@prodigy.net.mx');
email.Recipients.EMailAddresses := correo;
email.Subject := 'Hello';
email.ContentTransferEncoding:= 'multipart/related';
email.IsEncoded:=true;
email.Body.Assign(html);
txtpart := TIdText.Create(email.MessageParts);
txtpart.ContentType := 'text/html';
txtpart.Body.Text := RichEdit2.Text;
htmpart := TIdText.Create(email.MessageParts, html);
htmpart.ContentType := 'text/html';
bmppart := TIdAttachment.Create(email.MessageParts, filename);
bmppart.ContentType := 'image/jpeg';
bmppart.FileIsTempFile := false;
bmppart.contenttransfer:='base64';
bmppart.ContentDisposition := 'inline';
bmppart.ExtraHeaders.Values['Content-ID'] := '';
try
SMTP.Host:='server';
SMTP.Port:=25;
SMTP.Connect();
try
SMTP.Send(email);
ShowMessage('Sent');
except
on E: Exception do
ShowMessage('Failed: ' + E.Message);
end;
finally
SMTP.Disconnect();
email.Free();
html.Free();
end;
end;
end;

aldmoscardi
03-07-2007, 16:07:50
Provaste de decirle al componenete que iso vas a utlizar?
Yo e realizado un aplicacion que envia mail en formato HTML, si te interesa manda tu dir de mail que te paso un ejemplo, Saludos:cool:

Phantom_Drake
03-07-2007, 18:42:50
uso los componetes indy y mi correo es drakeofthephantom@hotmail.com agradeceria mucho el ejemplo thx ;)

CORBATIN
05-07-2007, 16:27:49
Hola, sino es mucha molestia, estaría agradecido si me pasas esa aplicación a mí también, gracias de nuevo.

UN SALUDO.

aldmoscardi
05-07-2007, 16:43:38
OK, dame un par de dias que te armo un ejemplo y te o mando para el finde, saludos

ContraVeneno
05-07-2007, 17:20:23
¿que acaso no han leído la guía de estilo?

¡Diablos!, incluso puse esa parte en este hilo....

argh....

CORBATIN
05-07-2007, 17:34:41
Corregir, si eres tan amable de publicarlo en este hilo del foro lo podré ver y el resto de compañeros también, muchas gracias y pido perdón a quién corresponda.

aldmoscardi
05-07-2007, 18:42:20
ok, estare publicando en este hilo, un ejemplo, calculo que para el fin de semana, saludos

ContraVeneno
05-07-2007, 18:49:29
Muy amable caballero :)

aldmoscardi
05-07-2007, 20:08:06
Hola, aca lesmando el ejemplo prometido, esta un poco burdo, pero es cuestion de arreglarlo, mirar el codigo y hacer un segimiento, si se fijan hay un archivo txt, en el cual esta el formato de la tabla, modificando puden hacer barias cosas, y si revisan hay un campo que es un corte de control en la aplicacion, cuando leo ese corte de control realizo el ingreso de datos desde la aplicacion, pudiendo modificar el archivo y manteniendo la aplicacion. saludos espero les sirva
:cool:

CORBATIN
05-07-2007, 23:40:57
Ok gracias, lo he probado y funciona pero ¿y si las imagenes no están en la web sino en el disco duro?, ¿como las podría adjuntar para que también se puedan ver dichas imagenes?,gracias.

aldmoscardi
05-07-2007, 23:52:50
para ese caso se complica un poco, la verdad que no lo he investigado, pero me he basado en el modelo de newsleter que utiliza mercado libre, hp y otros, para ese entonses era una solucion.
Abria que probar de mandar la imagen como archivo adjunto y hacer la referencia al mismo path, lo que no creo que funcione en un webmail.
Si algien con conocimientos puede aportar idea estaria bueno, ya que este hilo se puso realmente interesante
saludos
:confused:

CORBATIN
06-07-2007, 00:18:23
Vaya que rapidez en la contestación.

Mirando por ahí creo que en el html y antes de la imagen se pone esto:
<src image ="cid:logo.jpg">, es decir, la palabra "cid", lo coge de los archivos adjuntos, en este caso de las fotos adjuntas. Por lo que se podría intentar siempre y cuando con tú ejemplo se puedan adjuntar archivos.

aldmoscardi
06-07-2007, 00:22:14
y la verdad que prodria modificar el ejemplo para que adjunte un archi y provarlo, lo voy a intentar y lo levanto al hilo.
Muchas gracias por la sujerencia.:cool:

aldmoscardi
06-07-2007, 01:34:41
HOla, realice los cambios para que envies archivos adjuntos, pero no me funciona, esta comentado el codigo, fijate si le encontras la vuelta.
:cool:

Phantom_Drake
06-07-2007, 01:41:12
muchas gracias por el ejemplo lo checare y voy a ver ke le saco pero de todos modos muchas gracias

CORBATIN
06-07-2007, 11:41:49
Si me lo envía perfectamente el adjunto, el problema ahora es que me envia el html escrito en html y no como pagina web, es decir, aparece todo el codigo fuente de la pagina web.

aldmoscardi
06-07-2007, 15:47:45
si, es lo que me paso a mi, por eso comente la linea que adjunta el archivo, calculo que puede estar el error en el html, en la parte de la referencia de la imajen, pero como no entiendo mucho de html lo deje asi nomas, por hay algien posee la solucion, aunque en el contexto original ese modulo realizaba varios envios y si se adjunta imajenes digamos que no seria lo mas eficiente.

CORBATIN
06-07-2007, 16:25:55
Ok, entonces por lo que veo el problema/solucion esta en no adjuntar ficheros sino decirle al html de dónde tiene que coger esas fotos para que automaticamente las mande, igual que cuando elegimos un diseño de fondo al enviar un email, no las adjunta pero si las envia.

Ahora toca revisar html para sacar esa conclusión, hare pruebas.

Phantom_Drake
06-07-2007, 21:28:30
muchas gracias ContraVeneno, aldmoscardi :D practicamente junte lo ke decian los dos, modifike el archivo para convertir los rtf ke decia contraveneno con el txt ke venia en el ejemplo de aldmoscardi pero alfin pude mandar un correo con imagen de fondo y formato aunke solo imagenes ke estan en un server pero no hay pex con eso ya salgo del apuro y voy a tomar un server prestado para guardar las imagenes y leerlas de ahi ;) . si alguien ocupa ver el ejemplo ke hice ps nomas avisen y lo subo o lo mando :D

CORBATIN
08-07-2007, 22:12:29
Ok, te lo agradeceriamos todos si lo publicas, sobre todo yo, gracias.

Phantom_Drake
09-07-2007, 18:15:37
simon no hay pex en la semana armo un ejemplo ya corriendo con todo como aldmoscardi y lo subo :rolleyes:

CORBATIN
11-07-2007, 17:22:33
Aquí tengo lo que he formado pero me da un error y es el siguiente.
Cuando le doy a enviar la primera vez sale todo perfecto, pero si cambio la dirección de correo para enviarselo a otro, entonces me sale el error de EidProtocolReplyError 553 RCPT REFUSED.

Aquí tienen el codigo

procedure EnviarHtml(aText: String;ruta,destino:string;aImagenes:array of string);
var
idAttach: TidAttachment;
idText1: TidText;
idText2: TidText;
p: TidMessageParts;
idMessage1: TidMessage;
slBody: TStringList;
idSMTP1: TidSMTP;
x:integer;
begin
idMessage1 := TIdMessage.create(nil);
idMessage1.Recipients.Add;
idMessage1.Recipients[0].Address := destino;
idMessage1.subject := 'OFERTAS';
//idMessage1.from.Text := 'PACO J GARCIA.';

p := idMessage1.MessageParts;
slBody := TstringList.Create;
try
try
idSMTP1 := TidSMTP.create(nil);
idSMTP1.AuthenticationType :=atLogin;
idSMTP1.Port := 25;
idSMTP1.Host := 'smtp.ono.com';
idSMTP1.UserId :='upimolina@ono.com';
idSMTP1.Password := 'OLIMPICO';
// you can actually load the body from a RichEdit with
// slBody.Text := RichEdit1.LinesText;
slBody.Add(atext);
idText1 := TidText.Create(p, slBody);
idText1.ContentType := 'text/html';
idText2 := TidText.Create(p);
idText2.ContentType := 'text/plain';
idText2.Body.Text := '';
// This shows how to add an attachment
for x := 0 to 3 do
begin
if (length(aImagenes[x]) > 0) then
begin
idAttach := TidAttachment.Create(p, ruta+aImagenes[x]);
idAttach.ContentType := 'image/jpeg';
idAttach.ContentDisposition := 'inline';
idAttach.ExtraHeaders.Values['content-id'] := aImagenes[x];
idMessage1.Body.Assign(slBody);
idAttach.DisplayName := aImagenes[x];
idMessage1.ContentType := 'multipart/mixed';
end;
end;
idSMTP1.Connect;
idSMTP1.Send(idMessage1);
finally
idSMTP1.Disconnect;
idMessage1.Free;
slBody.Free;
Showmessage('enviado');
end;
except
showmessage('Error al enviar el e-mail, consulte con su administrador.');
end;
end;


Haber si alguién me puede decir a que se debe ese motivo y tener en cuenta que todavía lo estoy depurando, gracias.

Phantom_Drake
11-07-2007, 18:09:56
ps como no he tenido tiempo de acomodar el ejemplo ahi te va el codigo espero ke le puedas entender por ke esta todo desacomodado alguna duda no hay pex tu pregunta
procedure TFrm_Email.Button2Click(Sender: TObject);
var I,J,K,L,enviados:Integer;
cadena,correo:string;
Check: TcheckBox;
ChildControl: TControl;
html: TStrings;
htmpart, txtpart: TIdText;
bmppart: TIdAttachment;
email: TIdMessage;
//archiv:TStrings;
filename,ss,filename1: string;
a,count:Integer;
idStars: TIdAttachment;
//archiv:t;
begin
bandera:=true;
enviados:=0;
count:=0;
Redt_Texto.Lines.SaveToFile('C:\WINDOWS\EMKTMP.RTF');
r2hconv.rtf2html('C:\WINDOWS\EMKTMP.RTF', 'C:\WINDOWS\EMKTMP.HTM',['']);
try
RichEdit2.lines.LoadFromFile('C:\WINDOWS\EMKTMP.HTM');
for A:=0 to RichEdit2.lines.Count -1 do
begin
SS:=RichEdit2.Lines.Strings[A];
RichEdit1.Lines.Add(SS);
end;
finally
richedit1.Lines.Add('');
richedit1.Lines.Add('<br>');
richedit1.Lines.Add('<br>');
richedit1.Lines.Add('<br>');
richedit1.Lines.Add('<br>');
richedit1.Lines.Add('<br>');
richedit1.Lines.Add('<br>');
richedit1.Lines.Add('<br>');
richedit1.Lines.Add('</BODY>');
richedit1.Lines.Add('</HTML>');
//RichEdit2.Free;
end;

if DBLookupComboBox1.Text='' then
ShowMessage('debe seleccionar un formato')
else
begin
Lst_Mails.Items.Clear;
with dtm_contactos.Qry_Correos do
begin
Close;
SQL.Clear;
cadena:='select email from contactos where grupo<''0'' ';
for I := 0 to GroupBox9.ControlCount - 1 do
if GroupBox9.Controls[i] is TCheckBox then
if TCheckBox(GroupBox9.Controls[i]).Checked then
cadena:=cadena+ ' or grupo='''+(IntToStr(i+1))+'''';
sql.Add(cadena);
Open;
First;
if Lst_Correos.Items.Count > 0 then
Lst_Mails.Items:=Lst_Correos.Items;
while not Eof do
begin
Lst_Mails.Items.Add(fieldbyname('email').AsString);
next;
end;
end;
Lst_Correos.Items.Clear;
ProgressBar1.Max:=Lst_Mails.Items.Count;
Timer1.Enabled:=True;
end;
for K:=0 to Lst_Mails.Items.Count -1 do
begin
ProgressBar1.Position:=k+1;
correo:= Lst_Mails.Items.Strings[k];
CopyFile(PChar('C:\Proyecto Email\Formatos\'+ DBLookupComboBox1.text ),PChar('C:\Archivos de programa\Borland\Delphi7\Projects\'+ DBLookupComboBox1.text),TRUE);
//filename := ExtractFilePath(Application.ExeName) + '\homerorx.jpg';
//filename1 := 'C:\Proyecto Email\Formatos\'+ DBLookupComboBox1.text + '''';
filename := 'C:\Proyecto Email\Formatos\'+ DBLookupComboBox1.text ;
html := TStringList.Create();
{html.Add('<html>');
html.Add('<head>');
html.Add('</head>');
html.Add('<body bgcolor="blue"> <h1>Hello</h1>');
//html.Add('<img src="\homerorx.jpg" />');
html.Add('</body>');
html.Add('</html>');}
for L:=0 to RichEdit2.lines.Count do
begin
html.Add(RichEdit2.Lines.Strings[L]);
end;
email := TIdMessage.Create(self);
email.From.Text := 'correo';
email.Recipients.EMailAddresses := correo;
email.Subject := 'Aviso Muelle 7';
email.ContentType := 'text/html';
email.charset := 'iso-8859-1';
email.Body.Assign(html);
{ txtpart := TIdText.Create(email.MessageParts);
txtpart.ContentType := 'text/html';
txtpart.Body.Text := RichEdit2.Text;
htmpart := TIdText.Create(email.MessageParts, html);
htmpart.ContentType := 'text/html';
//htmpart.charset := 'iso-8859-1';

bmppart := TIdAttachment.Create(email.MessageParts, filename);
bmppart.ExtraHeaders.Values['Content-ID'] := '';
bmppart.ContentType := 'image/html';
//bmppart.charset := 'iso-8859-1'; }
try
SMTP.Host:='smtp.prodigy.net.mx';
SMTP.Port:=25;
If (k=0) OR (count=0)then
SMTP.Connect();
try
count:=count+1;
SMTP.Send(email);
//ShowMessage('Sent');
except
on E: Exception do
begin //ShowMessage('Failed: ' + E.Message);
SMTP.disConnect();
SMTP.Connect();
SMTP.Send(email);
end;
end;
end;
finally
email.Free();
html.Free();
if count=14 then
begin
SMTP.Disconnect;
count:=0;
end;
enviados:=enviados+1;
Label2.Caption:=IntToStr(enviados);
end;
end;
ProgressBar1.Position:=0;
ShowMessage('Mensajes Enviados Satisfactoriamente: ' + IntToStr(enviados));
SMTP.Disconnect();
end;

por cierto tambien tengo un problema con este solo me permite mandar hasta 70 correos alguien sabe como hacerle para ke no me rechaze la coexion el server?:o

CORBATIN
17-07-2007, 22:53:09
Hola de nuevo, le he realizado algunas reforma a mi aplicacion de enviar e-mail con html y fotos y va genial.

Ahora tengo un problema, al enviar a una direccion de hotmail, las fotos que incluye el email en html salen como adjuntos y no en el html. En cambio, en los clientes de correo como express o outlook se ven perfectos.

Por que puede pasar esto?.

GRACIAS.

Phantom_Drake
17-07-2007, 22:56:11
hehe a mi me pasa lo mismo pero alrevez en cuando reviso los correos en paginas web se miran perfectamente pero cuando los abro en los clientes de correo no sale la imagen deberiamos de juntar los proyectos y saldria el completo :p

CORBATIN
24-07-2007, 20:36:43
Hola, perdonar el retraso de tantos días. Lo que ha dicho no sería mala idea, si te es posible, pon tú código para enviar e-mail y yo el mío de nuevo y entre ambos podremos encontrar el error y sacar uno ok.

Te estaría agradecido, gracias.