Enviar Email pelo Delphi usando o Outlook
boa Tarde Pessoal
estou com um problema e gostaria que voces me ajudassem
estou tentando enviar um email pelo delphi usando o outllook,
consegui abrir o outlook e preecher os campos PARA, ASSUNTO e MENSAGEM
só que tem um detalhe..
na MENSAGEM nao consigo quebrar linha, portanto o Outlook quando abre, aparece a mensagem corrente.
Eu preciso que seja assim:
PARA: teste@teste.com.br
ASSUNTO: Teste Envio
MENSAGEM: teste 1
teste 2
e assim por diante.
só que sai assim
MENSAGEM: teste1teste2e assim por diante
já tentei usar #13 e/ou #10 e nada funcionou
aki esta o codigo que estou usando
procedure TfrmPRINCIPAL.SpeedButton1Click(Sender: TObject);
var mensagem: String;
var m1:string;
begin
m1:=' TESTE MENSAGEM '+#13#10+''
+'teste 1'+#13+''
+'teste 2 ';
completo:= 'mailto:teste@teste.com.br'+
'?subject=teste assunto '+
'&body= '+m1+' ';
ShellExecute(GetDesktopWindow,'open',pchar(mensagem),nil,nil,sw_ShowNormal);
Obrigado
estou com um problema e gostaria que voces me ajudassem
estou tentando enviar um email pelo delphi usando o outllook,
consegui abrir o outlook e preecher os campos PARA, ASSUNTO e MENSAGEM
só que tem um detalhe..
na MENSAGEM nao consigo quebrar linha, portanto o Outlook quando abre, aparece a mensagem corrente.
Eu preciso que seja assim:
PARA: teste@teste.com.br
ASSUNTO: Teste Envio
MENSAGEM: teste 1
teste 2
e assim por diante.
só que sai assim
MENSAGEM: teste1teste2e assim por diante
já tentei usar #13 e/ou #10 e nada funcionou
aki esta o codigo que estou usando
procedure TfrmPRINCIPAL.SpeedButton1Click(Sender: TObject);
var mensagem: String;
var m1:string;
begin
m1:=' TESTE MENSAGEM '+#13#10+''
+'teste 1'+#13+''
+'teste 2 ';
completo:= 'mailto:teste@teste.com.br'+
'?subject=teste assunto '+
'&body= '+m1+' ';
ShellExecute(GetDesktopWindow,'open',pchar(mensagem),nil,nil,sw_ShowNormal);
Obrigado
Rodrigo
Curtidas 0
Respostas
Fábio Cruz
01/07/2010
tentou utilizar a TAG html para quebra de linha? <br />
GOSTEI 0
Euclides Cunha
01/07/2010
Posso te ajudar, mas utilizando os componetes socket ou mesmo Indy, pra enviar e-mail.. e anexos tbm.. se te ajuda posso postar isso.. aqui.. mas só amanhã ou depois.. flw
GOSTEI 0
Marco Salles
01/07/2010
Bem ,depende do Sistema Operacional o #13#10 não irá funcionar
Use a Constante sLineBreak Definida na Uses System; Veja a definiççao desta Constante
Esta Constante independe do Sistema Operacional ) Pois esta protegida pelas directivas de Compilação
const
sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF}
{$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF}
{$IFDEF MACOSX} AnsiChar(#10) {$ENDIF};
GOSTEI 0
Marco Salles
01/07/2010
Bem ,depende do Sistema Operacional o #13#10 não irá funcionar
Use a Constante sLineBreak Definida na Uses System; Veja a definiççao desta Constante
Esta Constante independe do Sistema Operacional ) Pois esta protegida pelas directivas de Compilação
const
sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF}
{$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF}
{$IFDEF MACOSX} AnsiChar(#10) {$ENDIF};
GOSTEI 0
Rodrigo
01/07/2010
Rafael se possivel, poste o codigo por favor pra ver se consigo fazer
Muito Obrigado
Muito Obrigado
GOSTEI 0
Rodrigo
01/07/2010
Euclides, por favor se possivel poste o codigo
Obrigado
Obrigado
GOSTEI 0
Rodrigo
01/07/2010
Marco, eu nao entendi muito bem estes codigo, sou iniciante
agradecei se voce pudess postar os codigos certinho ou entao me mandar no email rodrigoantonioli@hotmail.com
Muito Grato
agradecei se voce pudess postar os codigos certinho ou entao me mandar no email rodrigoantonioli@hotmail.com
Muito Grato
GOSTEI 0
Marco Salles
01/07/2010
Bem ,depende do Sistema Operacional o #13#10 não irá funcionar
Use a Constante sLineBreak Definida na Uses System; Veja a definiççao desta Constante
Esta Constante independe do Sistema Operacional ) Pois esta protegida pelas directivas de Compilação
Eu não estou lhe passando codigo. Eu estou lhe passando um Dica
Pelo que se percebe vc ja consegui enviar emails
So que sua mensagem não sai com quebra de linha
Vc disse tb que ja tentou quebrar a Linha com #13 e com #10 e nada Adiantou
Ai que entra a dica . O Correto para quebra a Linha é usar sLineBreak ( Pq independe do Sistema Operacional)
Se vc tiver no Linux o SlineBreak correposnde ao #10 , se tiver no MSWINDOWS a quebra de Linha é 13#10
const
sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF}
{$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF}
{$IFDEF MACOSX} AnsiChar(#10) {$ENDIF};
se tiver no MACOSX será 10 .. E futuramente Outros Sistemas Para Quebrar Linha
Recomendável
Showmessage('Quebrar'+sLineBreak+'Linha');
Mais Usual
Showmessage('Quebrar'+#13#10+'Linha');
GOSTEI 0
Euclides Cunha
01/07/2010
Essa é uma rotina que funciona num programa q fiz .. apenas de envio de e-mail.. Para funcionar, primeiramente me
conecto ao servidor pop3 e posteriormente ao SMTP , envio o e-mail e por fim
desconecto dos dois... simples .. claro no caso so Yahoo.. tem q ativar na sua
conta de e-mail a opção de trabalhar com os servidores POP e SMTP do Yahoo.. opções
de E-mail...
Mas pelo o que entendi do seu problema é que esta concatenando todas suas string, transformando-as em uma só.., ai da problema mesmo.. no corpo do e-mail.. pode concatenar e utilizar a função "quebra de linha".. mas o assunto é um paramentro a parte.. poste toda sua rotina para dar uma olhada...
IdPOP3.Host := 'pop.mail.yahoo.com.br'; IdPOP3.Password := 'suasenha'; IdPOP3.UserId := 'usuario'; IdPOP3.Port := 110; IdPOP3.Connect; // Mensagem IdMessage1.Subject := 'assunto'; IdMessage1.Body.Text := 'Corpo do e-mail'; // Remetente IdMessage1.From.Address := 'usuario@yahoo.com.br'; IdMessage1.From.Name := SysComputerName(); //captura o nome da máquina //IdMsgSend.ReplyTo.EMailAddresses := 'from@ficticio.com.br'; //não precisa // Anexo IdMessage1.MessageParts.Clear; TIdAttachment.create(idmessage1.MessageParts, TFileName('nomearquivo.ext')); // Destinatario IdMessage1.Recipients.EMailAddresses := 'usuario@yahoo.com.br'; // Autenticacao - Use apenas quando o servidor exigir IdSMTP.AuthenticationType := atLogin; IdSMTP.UserId := 'usuario'; IdSMTP.Password := 'senha'; // Dados do Servidor IdSMTP.Host := 'smtp.mail.yahoo.com.br'; IdSMTP.Port := 25; IdSMTP.Connect; try IdSMTP.Send(IdMessage1); //ShowMessage('Enviado com Sucesso'); finally IdSMTP.Disconnect; end; IdPOP3.Disconnect;
Mas pelo o que entendi do seu problema é que esta concatenando todas suas string, transformando-as em uma só.., ai da problema mesmo.. no corpo do e-mail.. pode concatenar e utilizar a função "quebra de linha".. mas o assunto é um paramentro a parte.. poste toda sua rotina para dar uma olhada...
IdPOP3.Host := 'pop.mail.yahoo.com.br'; IdPOP3.Password := 'suasenha'; IdPOP3.UserId := 'usuario'; IdPOP3.Port := 110; IdPOP3.Connect; // Mensagem IdMessage1.Subject := 'assunto'; IdMessage1.Body.Text := 'Corpo do e-mail'; // Remetente IdMessage1.From.Address := 'usuario@yahoo.com.br'; IdMessage1.From.Name := SysComputerName(); //captura o nome da máquina //IdMsgSend.ReplyTo.EMailAddresses := 'from@ficticio.com.br'; //não precisa // Anexo IdMessage1.MessageParts.Clear; TIdAttachment.create(idmessage1.MessageParts, TFileName('nomearquivo.ext')); // Destinatario IdMessage1.Recipients.EMailAddresses := 'usuario@yahoo.com.br'; // Autenticacao - Use apenas quando o servidor exigir IdSMTP.AuthenticationType := atLogin; IdSMTP.UserId := 'usuario'; IdSMTP.Password := 'senha'; // Dados do Servidor IdSMTP.Host := 'smtp.mail.yahoo.com.br'; IdSMTP.Port := 25; IdSMTP.Connect; try IdSMTP.Send(IdMessage1); //ShowMessage('Enviado com Sucesso'); finally IdSMTP.Disconnect; end; IdPOP3.Disconnect;
GOSTEI 0
Rodrigo
01/07/2010
boa tarde Euclides..
pois aki esta a codificação
procedure TfrmPRINCIPAL.SpeedButton1Click(Sender: TObject);
var completo: String;
var m1:string;
begin
m1:=' ABERTURA DE CHAMADO TECNICO '+#13#10+''
+'teste 1'+#13+''
+'teste 2 ';
completo:= 'mailto:dwi@com4.com.br'+
'?subject=Abertura de Chamado Técnico '+
'&body= '+m1+' ';
ShellExecute(GetDesktopWindow,'open',pchar(completo),nil,nil,sw_ShowNormal);
end;
e o que aparece é assim:
Agradeço desde já.
pois aki esta a codificação
procedure TfrmPRINCIPAL.SpeedButton1Click(Sender: TObject);
var completo: String;
var m1:string;
begin
m1:=' ABERTURA DE CHAMADO TECNICO '+#13#10+''
+'teste 1'+#13+''
+'teste 2 ';
completo:= 'mailto:dwi@com4.com.br'+
'?subject=Abertura de Chamado Técnico '+
'&body= '+m1+' ';
ShellExecute(GetDesktopWindow,'open',pchar(completo),nil,nil,sw_ShowNormal);
end;
e o que aparece é assim:
Agradeço desde já.
GOSTEI 0
Marco Salles
01/07/2010
Ha agora deu para entender o que vc quer
Mas desde jeito que vc esta fazendo existem duas limitações
Não é permitido o envio de anexos com esta solução
As quebras de linha não são respeitadas.
Então acho que vc deve tentar uma das Tantas outras soluçoes disponiveis
GOSTEI 0
Rodrigo
01/07/2010
muito obrigado,
consegui fazer do jeito do Euclides
valeu mesmo!
abraço!
consegui fazer do jeito do Euclides
valeu mesmo!
abraço!
GOSTEI 0
Marco Salles
01/07/2010
Beleza , coloque concuido
GOSTEI 0
Rafael
01/07/2010
muito obrigado,
consegui fazer do jeito do Euclides
valeu mesmo!
abraço!
consegui fazer do jeito do Euclides
valeu mesmo!
abraço!
Sei que já conseguiu mas para outros que chegarem a esse post informo que é possível quebrar linha colocando o caractere %0A após a sua string. Não esqueça de concatenar-> QueryConsultaNOME.Text+%0A
GOSTEI 0