Email no Delphi 7
Fiz um programa somente para cadastrar clientes e então enviar email. Tenho uma dúvida? Ele deve enviar no corpo do email, uma imagem .jpg e um texto promocional. Os endereços de email, vêm do banco de clientes. Como fazer para colocar uma imagem dentro de um memo(onde fiz o corpo do meu email), e será que um while no banco, selecionando o campo email para compor o endereço para onde enviarei o email, funcionará? Uso D7 com FB 1.5. Espero ter sido claro.
Paulo
Curtidas 0
Respostas
Michael
04/09/2005
Olá colega!
Para colocar uma imagem em um email, vc deve usar a linguagem [b:30e241d78c]HTML[/b:30e241d78c]. Então, no memo que vc usa, coloque algo como:
Troque o src pelo caminho da sua imagem, e [b:30e241d78c]Width [/b:30e241d78c]e [b:30e241d78c]Height [/b:30e241d78c]pela largura e altura dela, respectivamente.
Se a imagem não estiver online, então vc deve anexá-la ao corpo do email, e então referenciá-la na tag [b:30e241d78c]IMG [/b:30e241d78c]localmente.
[]´s
Para colocar uma imagem em um email, vc deve usar a linguagem [b:30e241d78c]HTML[/b:30e241d78c]. Então, no memo que vc usa, coloque algo como:
<img src="http://www.seusite.com.br/imagem.jpg" width="123" height="123">
Troque o src pelo caminho da sua imagem, e [b:30e241d78c]Width [/b:30e241d78c]e [b:30e241d78c]Height [/b:30e241d78c]pela largura e altura dela, respectivamente.
Se a imagem não estiver online, então vc deve anexá-la ao corpo do email, e então referenciá-la na tag [b:30e241d78c]IMG [/b:30e241d78c]localmente.
[]´s
GOSTEI 0
Paulo
04/09/2005
Deixa-me explicar melhor:
1) O meu programa de cadastro, é que vai gerar e enviar o email. Fiz um formulário, com um Memo(body do email), um edit(Assunto) e outro edit(endereço de envio). No Delphi 6, usava-se o TNSMTP para envio de menssagens. No D7, ainda não sei qual usar, talvez o da palheta INDY(IdNSMTP).
2)Eu não sei, como colocar uma imagem no meu componente TMemo, ou TRxMemo, TJvMemo ou qualquer outro componente semelhante.
3)No caso do TJvMail, da Jedi Componente, Configurar as propriedades, Body, Recipient e Subject em Run-Time. Estas são as minhas dúvidas
1) O meu programa de cadastro, é que vai gerar e enviar o email. Fiz um formulário, com um Memo(body do email), um edit(Assunto) e outro edit(endereço de envio). No Delphi 6, usava-se o TNSMTP para envio de menssagens. No D7, ainda não sei qual usar, talvez o da palheta INDY(IdNSMTP).
2)Eu não sei, como colocar uma imagem no meu componente TMemo, ou TRxMemo, TJvMemo ou qualquer outro componente semelhante.
3)No caso do TJvMail, da Jedi Componente, Configurar as propriedades, Body, Recipient e Subject em Run-Time. Estas são as minhas dúvidas
GOSTEI 0
Michael
04/09/2005
Olá!
Realmente, a partir do Delphi 7 é vc deve usar os componentes da palheta Indy.
Sobre uma imagem dentro do Memo, isso não seria a solução. Como já falei, para exibir alguma figura em um email, deve-se criar a mensagem no formato HTML, que é suportado por quase todos os clientes de email. Vc deve usar a tag que mencionei na mensagem anterior.
Se sua intenção é mostrar a imagem dentro da mensagem ao usuário, por alguma razão, então antes de enviar invariavelmente vc terá que inserir a tag IMG.
[]´s
Realmente, a partir do Delphi 7 é vc deve usar os componentes da palheta Indy.
Sobre uma imagem dentro do Memo, isso não seria a solução. Como já falei, para exibir alguma figura em um email, deve-se criar a mensagem no formato HTML, que é suportado por quase todos os clientes de email. Vc deve usar a tag que mencionei na mensagem anterior.
Se sua intenção é mostrar a imagem dentro da mensagem ao usuário, por alguma razão, então antes de enviar invariavelmente vc terá que inserir a tag IMG.
[]´s
GOSTEI 0
Paulo
04/09/2005
Deveria ser mais ou menos assim:
Agora como enviar essa imagem no corpo do email? A imagem, por exemplo, está em: C:\Imagens\LOGO.jpg. Essa imagem ela fica logo abaixo do Texto do Email. Não pode ir Anexada. Ela deve ir no corpo do email. Eu fiz o corpo com um componente RxRichEdit. Ainda não consegui nada. Os endereços vêm do banco de dados, do campo email, por isso o while acima, para ir prenchendo e enviando automaticamente, já com o texto e a imagem (igual para todos). Grato.
tabela.first;
Texto:=´Compre meus produtos´;
while not tabela.eof do begin
endereco:=Tabelaemail.Value;
meucomponentedeemail.send;
meucomponentedeemail.body:=Texto;
tabela.next;
end;
Agora como enviar essa imagem no corpo do email? A imagem, por exemplo, está em: C:\Imagens\LOGO.jpg. Essa imagem ela fica logo abaixo do Texto do Email. Não pode ir Anexada. Ela deve ir no corpo do email. Eu fiz o corpo com um componente RxRichEdit. Ainda não consegui nada. Os endereços vêm do banco de dados, do campo email, por isso o while acima, para ir prenchendo e enviando automaticamente, já com o texto e a imagem (igual para todos). Grato.
GOSTEI 0
Paulo
04/09/2005
Eis aí a minha UNIT completa. Aceito sugestões. Não consigo enviar uma imagem por este email. A dúvida é como acrescentar uma tag html no body do email. Também gostaria de enviar os emails, cujos destinatários estão cadastrados no banco de dados, direto, dentro de um while. Fiz, mas não funcionou. Creio que a rotina de envio deve estar dentro do loop e a medida que vai encontrando um destinatário, ela vai enviando. Creio que é isto, pois como está, não vai. Desde ja, grato!!
Abaixo a minha rotina de configuração
O que devo fazer?
unit untEmail;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, ToolWin, ImgList,
LMDCustomComponent, LMDCustomHint, LMDCustomShapeHint, LMDShapeHint,
JvComponent, JvMail, IdMessage, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, JvExControls,
JvEditorCommon, JvEditor, RxRichEd, Buttons;
type
TfrmEmail = class(TForm)
Panel1: TPanel;
GroupBox1: TGroupBox;
ImageList1: TImageList;
ControlBar1: TControlBar;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
LMDShapeHint1: TLMDShapeHint;
edPara: TEdit;
edAssunto: TEdit;
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
OpenDialog1: TOpenDialog;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
edTexto: TRxRichEdit;
BitBtn1: TBitBtn;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ToolButton2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmEmail: TfrmEmail;
implementation
uses untDm;
const
ScreenWidth: LongInt = 800;
ScreenHeight: LongInt = 600;
{$R *.dfm}
procedure TfrmEmail.FormCreate(Sender: TObject);
begin
scaled := true;
if (screen.width <> ScreenWidth)then
begin
height := longInt(height)*longInt(screen.height) div screenHeight;
width := longint(width)*longInt(screen.width) div screenWidth;
scaleBy(screen.width, ScreenWidth);
end;
end;
procedure TfrmEmail.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_down then begin
Perform(CM_DialogKey, VK_Down, 0);
end;
end;
procedure TfrmEmail.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then begin
key := 0;
perform(cm_dialogkey, vk_tab, 0);
end;
end;
procedure TfrmEmail.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_up then begin
perform(cm_dialogkey, vk_up, 0);
end;
end;
procedure TfrmEmail.ToolButton2Click(Sender: TObject);
begin
Close;
end;
procedure TfrmEmail.BitBtn1Click(Sender: TObject);
var
a:string;
begin
with Dm.qCadastro do begin
Close;
Sql.Clear;
Sql.Add(´Select * from cadastro´);
Open;
end;
Dm.qCadastro.First;
a:=trim(Dm.qCadastroEMAIL.Value);
while not(Dm.qCadastro.Eof) do begin
a:=trim(a)+´,´+trim(Dm.qCadastroEMAIL.Value);
edPara.Text:=trim(a);
Dm.qCadastro.Next;
end;
end;
procedure TfrmEmail.ToolButton1Click(Sender: TObject);
var
arq:TextFile;
sm,us,se,path,ass,em,img:string;
begin
//Carrego as informações de um arquivo texto
AssignFile(arq,ExtractFilePath(ParamStr(0))+´Config.cfg´);
Reset(arq);
Readln(arq,sm);
Readln(Arq,us);
Readln(arq,se);
Readln(arq,path);
Readln(arq,ass);
Readln(arq,em);
Readln(arq,img);//Endereço da imagem
CloseFile(arq);
//Preenho meus componentes de email
IdSMTP1.Host:=sm;
IdSMTP1.Username:=us;
IdSMTP1.Password:=se;
IdMessage1.From.Name:=ass;
IdMessage1.From.Address:=em;
IdMessage1.Recipients.EMailAddresses:=edPara.Text;
IdMessage1.Subject:=edAssunto.Text;
IdMessage1.Body:=edTexto.Lines;
if CheckBox1.Checked then
IdMessage1.ReceiptRecipient.Text := IdMessage1.From.Text; // Auto Resposta
//Conecto e envio o email
IdSMTP1.Connect;
try
IdSMTP1.Send(IdMessage1);
finally
IdSMTP1.Disconnect;
end;
Application.MessageBox(´Email enviado com sucesso!´, ´Confirmação´, MB_ICONINFORMATION + MB_OK);
end;
end.
Abaixo a minha rotina de configuração
procedure TfrmConfig.BitBtn1Click(Sender: TObject);
var
arq:TextFile;
begin
try
AssignFile(arq,ExtractFilePath(ParamStr(0))+´Config.cfg´);
rewrite(arq);
writeln(arq,edSmtp.Text);
writeln(arq,edUsu.Text);
writeln(arq,edSenha.Text);
writeln(arq,edImagem.Text);
writeln(arq,edAssinatura.Text);
writeln(arq,edEmail.Text);
writeln(arq,´<img ´´+edImagem.Text+´´width=´123´ heigth=´123´>´);
closefile(arq);
ShowMessage(´Arquivo gerado com sucesso´);
except
on Exc: Exception do begin
ShowMessage(´Erro ao tentar gerar arquivo de configuração´+Exc.Message);
end;
end;
end;
O que devo fazer?
GOSTEI 0
Paulo
04/09/2005
Tentei fazer assim, mas não deu cerrto. Dá erro de access violation na seguinte linha:
lTextPart := TIdText.Create(lMessage.MessageParts);
procedure TfrmEmail.ToolButton1Click(Sender: TObject);
var
arq:TextFile;
sm,us,se,path,ass,em,img:string;
lMessage: TIdMessage;
lTextPart: TIdText;
lImagePart: TIdAttachment;
begin
with Dm.qCadastro do begin
Close;
Sql.Clear;
Sql.Add(´Select * from cadastro´);
Open;
end;
//Carrego as informações de um arquivo texto
AssignFile(arq,ExtractFilePath(ParamStr(0))+´Config.cfg´);
Reset(arq);
Readln(arq,sm);
Readln(Arq,us);
Readln(arq,se);
Readln(arq,path);
Readln(arq,ass);
Readln(arq,em);
Readln(arq,img);
CloseFile(arq);
//Preenho meus componentes de email
IdSMTP1.Host:=sm;
IdSMTP1.Username:=us;
IdSMTP1.Password:=se;
IdMessage1.From.Name:=ass;
IdMessage1.From.Address:=em;
if CheckBox2.Checked then begin
try
IdSMTP1.Connect;
except
On Exc:Exception do begin
ShowMessage(´Erro ao tentar conectar ao servidor SMTP´+Exc.Message);
end;
end;
try
Dm.qCadastro.First;
while not(Dm.qCadastro.Eof) do begin
IdMessage1.Recipients.EMailAddresses:=Dm.qCadastroEMAIL.Value;
IdMessage1.Subject:=edAssunto.Text;
IdMessage1.Body.Clear;
lTextPart := TIdText.Create(lMessage.MessageParts);
lTextPart.Body.Text := ´This is a plain text message´;
lTextPart.ContentType := ´text/plain´;
lTextPart := TIdText.Create(lMessage.MessageParts);
lTextPart.Body.Text := ´<html><body><b>This is a HTML message with picture</b><img src=´htmlbodyIMG0000.JPG´ ></body></html>´;
lTextPart.ContentType := ´text/html´;
lImagePart := TIdAttachment.Create(lMessage.MessageParts, ´htmlbodyIMG0000.JPG´);
lImagePart.ContentType := ´image/jpg´;
lImagePart.Headers.Add(´Content-ID: <htmlbodyIMG0000.JPG>´);
IdSMTP1.Send(IdMessage1);
Dm.qCadastro.Next;
end;
IdSMTP1.Disconnect;
Application.MessageBox(´Email enviado com sucesso!´, ´Confirmação´, MB_ICONINFORMATION + MB_OK);
except
On Exc:Exception do begin
ShowMessage(´Erro ao tentar enviar email: ´+Exc.Message);
end;
end;
if CheckBox1.Checked then
IdMessage1.ReceiptRecipient.Text := IdMessage1.From.Text; // Auto Resposta
end;
GOSTEI 0
Paulo
04/09/2005
Ainda não consegui enviar uma imagem dentro do corpo do email. Tá brabo!!!
GOSTEI 0