Ir para conteúdo
Fórum Script Brasil
  • 0

Erro Ao Montar Mensagem De Email


Eder

Pergunta

Ola..pessoal.

Foi removido o microsoft office de uma maquina de um usuario..e instalado o BrOffice, porem agora tenho um programa e nele tem um botão que monta o email em cima do outllok express..mas este..não foi removido somente o Office(word, excel etc...).

Então agora ao clickar no botão da a seguinte mensagem de erro:

Error While Trying to send email

Eu uso esta função pra mandar o email:

Uses     

Mapi

function SendEMail(Handle: THandle; Mail: TStrings): 

Cardinal; 

type 

TAttachAccessArray = array [0..0] of TMapiFileDesc; 

PAttachAccessArray = ^TAttachAccessArray; 

var 

MapiMessage: TMapiMessage; 

Receip: TMapiRecipDesc; 

Attachments: PAttachAccessArray; 

AttachCount: Integer; 

i1: integer; 

FileName: string; 

dwRet: Cardinal; 

MAPI_Session: Cardinal; 

WndList: Pointer; 

begin 

dwRet := MapiLogon(Handle, 

PChar(''), 

PChar(''), 

MAPI_LOGON_UI or MAPI_NEW_SESSION, 

0, @MAPI_Session); 

  

if (dwRet <> SUCCESS_SUCCESS) then 

begin 

MessageBox(Handle, 

PChar('Error while trying to send email'), 

PChar('Error'), 

MB_ICONERROR or MB_OK); 

end 

else 

begin 

FillChar(MapiMessage, SizeOf(MapiMessage), #0); 

Attachments := nil; 

FillChar(Receip, SizeOf(Receip), #0); 

  

if Mail.Values['to'] <> '' then 

begin 

Receip.ulReserved := 0; 

Receip.ulRecipClass := MAPI_TO; 

Receip.lpszName := 

StrNew(PChar(Mail.Values['to'])); 

Receip.lpszAddress := StrNew(PChar('SMTP:' + 

Mail.Values['to'])); 

Receip.ulEIDSize := 0; 

MapiMessage.nRecipCount := 1; 

MapiMessage.lpRecips := @Receip; 

end; 

  

AttachCount := 0; 

  

for i1 := 0 to MaxInt do 

begin 

if Mail.Values['attachment' + IntToStr(i1)] = '' 

then 

break; 

Inc(AttachCount); 

end; 

  

if AttachCount > 0 then 

begin 

GetMem(Attachments, SizeOf(TMapiFileDesc) * 

AttachCount); 

  

for i1 := 0 to AttachCount - 1 do 

begin 

FileName := Mail.Values['attachment' + 

IntToStr(i1)]; 

Attachments[i1].ulReserved := 0; 

Attachments[i1].flFlags := 0; 

Attachments[i1].nPosition := ULONG($FFFFFFFF); 

Attachments[i1].lpszPathName := 

StrNew(PChar(FileName)); 

Attachments[i1].lpszFileName := 

StrNew(PChar(ExtractFileName(FileName))); 

Attachments[i1].lpFileType := nil; 

end; 

MapiMessage.nFileCount := AttachCount; 

MapiMessage.lpFiles := @Attachments^; 

end; 

  

if Mail.Values['subject'] <> '' then 

MapiMessage.lpszSubject := 

StrNew(PChar(Mail.Values['subject'])); 

if Mail.Values['body'] <> '' then 

MapiMessage.lpszNoteText := 

StrNew(PChar(Mail.Values['body'])); 

  

WndList := DisableTaskWindows(0); 

try 

Result := MapiSendMail(MAPI_Session, Handle, 

MapiMessage, MAPI_DIALOG, 0); 

finally 

EnableTaskWindows( WndList ); 

end; 

  

for i1 := 0 to AttachCount - 1 do 

begin 

StrDispose(Attachments[i1].lpszPathName); 

StrDispose(Attachments[i1].lpszFileName); 

end; 

  

if Assigned(MapiMessage.lpszSubject) then 

StrDispose(MapiMessage.lpszSubject); 

if Assigned(MapiMessage.lpszNoteText) then 

StrDispose(MapiMessage.lpszNoteText); 

if Assigned(Receip.lpszAddress) then 

StrDispose(Receip.lpszAddress); 

if Assigned(Receip.lpszName) then 

StrDispose(Receip.lpszName); 

MapiLogOff(MAPI_Session, Handle, 0, 0); 

end; 

end;
exemplo de envio no botão:
procedure TForm1.BitBtn5Click(Sender: TObject);
var
mail: TStringList;
begin
mail := TStringList.Create;
try
mail.values['to'] := 'Email@test.xyz'; ///AQUI VAI O EMAIL DO DESTINATARIO///
mail.values['subject'] := 'Hello'; ///AQUI O ASSUNTO///
mail.values['body'] := 'blah'; ///AQUI O TEXTO NO CORPO DO EMAIL///
mail.values['attachment0'] := 'C:\Test.txt'; ////AQUI O ENDEREÇO ONDE ENCONTRAM OS ARQUIVOS//
mail.values['attachment1']:='C:\Test2.txt'; ///IDEM  - NO ATTACHMENT1    TEM QUE COLOCAR A SEQUNCIA DO EMAIL A QUAL DESEJA ENVIAR EXEMPLO: ATTACHMENT1
sendEMail(Application.Handle, mail);
finally
mail.Free;
end;
end;

alguém teria alguma ideia pra resolver este problema??

Obs> Na verdade eu queria abandonar este tipo de envio de email(senão fico dependente), gostaria de fazer tudo pelo delphi...mas peguei uns exemplo na net e nenhum funcionou.....a maioria dava problemas de incompatibilidade com servidores SMTP

Mas se alguém tiver algo eficiente por favor me apresente...

Agradecido..

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

Erro Enquanto Tentando enviar e-mail

if (dwRet <> SUCCESS_SUCCESS) then 
  begin 
     MessageBox(Handle, 
     PChar('Error while trying to send email'), 
     PChar('Error'), 
     MB_ICONERROR or MB_OK); 
  end 
else 
  begin 
     FillChar(MapiMessage, SizeOf(MapiMessage), #0); 
     Attachments := nil; 
     FillChar(Receip, SizeOf(Receip), #0); 
    .
    .
    .
Aparentemente foi falha ao tentar efetuar o LOGON com o servidor de email na clausula uses coloque shellapi e tente este codigo num botao e veja se funciona (somente para teste )
ShellExecute(Handle, 'open', pEMail, nil, nil, SW_SHOW);

defina uma variavel const pEMail = 'mailto:email_da_pessoa@bol.com.br';

Link para o comentário
Compartilhar em outros sites

  • 0

Jonas...não deu certo...ai tava dando uma testada agora a tarde...e verifiquei que este erro é somente na minha máquina os demais usuários de outras maquinas..estão usando sem problema

Acredito que com a remoção do Microsoft Office...algo foi removido junto...e como eu uso esta função ..acredito que ela precisa de algum arquivo ou configuração do Microsoft office..sei lá...é uma ideia...pois o erro é somente na minha maquina.

Se tiveres mais alguma ideia??

Carinha não tens alguma dica mais eficiente pra mandar email pelo delphi sem depender do Outlook express?

Grato

Link para o comentário
Compartilhar em outros sites

  • 0
Ok ... se não funcionou é porque algum arquivo de configuração ou dll foi removida... o teste era justamente para saber isto .... tenho alguns codigos de envio de email, vou procurar um bom para voce depois eu posto.

R. Beleza carinha..se tiveres e puder postar aqui...te agradeço.

muito grato..valeu

Abraço :D

Link para o comentário
Compartilhar em outros sites

  • 0

Desenvolver um aplicativo para enviar e-mail.

A seguir como é simples fazer com que um aplicativo envie, automaticamente, e-mails com as mais

diversas finalidades.

Primeiramente é necessário que o usuário tenha uma conta de e-mail cadastrada em algum servidor de e-mails.

Em seguida o programador deve obter alguns dados com relação à sua conta de e-mail, listados abaixo:

- host SMTP (para envio de mensagens)

- port utilizado pelo servidor de e-mails

- login e senha do usuário remetente.

Neste exemplo será usado o Delphi 6 e uma conta de e-mail do Yahoo.

Usaremos um componente que já vem no Delphi chamado IdSMTP que fará a comunicação com o servidor de e-mail,

no caso o Yahoo.

A escolha deste componente se deve ao fato de ele permitir autenticação com senha, um requisito de diversos

servidores de e-mail disponíveis no mercado.

Pois bem, vamos ao que interessa:

Adicione ao seu formulário um componente IdSMTP, presente na aba Indy Client, e um IdMessage, da aba Indy Misc.

Agora passaremos a configurar o IdSMTP, setando as propriedades a seguir:

- AuthenticationType = atLogin

- Host = smtp.mail.yahoo.com.br

- Password = [senha do usuário do yahoo]

- Port = 587

- UserId = [login do usuário do yahoo].

Apresentamos agora o código fonte da função utilizada para configuraro IdMessage e o IdSMTP, e enviar a mensagem.

procedure EnviaMail( )
begin 
   //Configuração do IdMessage (dados da mensagem)
   IdMessage1.From.Address := 'remetente@yahoo.com.br'; //e-mail do remetente  
   IdMessage1.Recipients.EMailAddresses := 'destinatario@mail.com.br'; //e-mail do destinatário
   IdMessage1.Subject := 'Assunto do e-mail'; //Assunto  
   IdMessage1.Body.Add('Mensagem do e-mail'); //Corpo da mensagem

   //Configuração do IdSMTP 
   IdSMTP1.Host := 'smtp.mail.yahoo.com.br'; //Host SMTP do yahoo
   IdSMTP1.Port := 587; //Port do yahoo
   IdSMTP1.UserId := 'usuario'; //Login do usuário
   IdSMTP1.Password := 'senha'; //Senha do usuário

   IdSMTP1.Connect; //Estabelece a conexão
   IdSMTP1.Authenticate; //Faz a autenticação

   try
      IdSMTP1.Send(IdMessage1); //Envia a mensagem
   except
      showmessage('ERRO'); //Mensagem de erro
   end;
end;

Esse codigo eu testei e funciona ... voce deve modifica-lo para o seu uso.

Link para o comentário
Compartilhar em outros sites

  • 0
Esse codigo eu testei e funciona ... voce deve modifica-lo para o seu uso.

R.: Jonas....cara...se eu não me engano eu já testei este codigo.....você achou na net nè??

eu acho que já testei ele e ele não funcionou.....

No teste que você fez você usou qual servidor smtp??

yahoo, ig ??

você tem um exemplo em andamento eu seu aplicativo, sendo usado?? poderias me dizer...

muito Grato..valeu :D

Link para o comentário
Compartilhar em outros sites

  • 0
R.: Jonas....cara...se eu não me engano eu já testei este codigo.....você achou na net nè??
É sempre de bom hábito dar crédito a quem é de direito, não é mesmo?!

Este código tem como origem o artigo Interação entre Delphi e servidor de e-mail (ref. ActiveDelphi)

e também foi transcrito no site EPOPÉIA por Gislaine com os devidos créditos. ;)

Eu não gostaria de ver alguma dica/artigo meu por aí, assinado por outra pessoa, esta é minha opnião - será que alguém gosta?

Abraços

p.s. opnião do usuário Micheus, não do moderador.

Link para o comentário
Compartilhar em outros sites

  • 0

realmente eu achei na net, mas modifiquei o codigo para funcionar como eu queria ... o servidor de email que eu usei é do bol, mas caso voce já tenha usado e não funcionou existe alguns exemplos no prorpio delphi

e caro Micheus

Eu não gostaria de ver alguma dica/artigo meu por aí, assinado por outra pessoa, esta é minha opnião - será que alguém gosta?

eu não disse que esse codigo era meu ( mas caso voce não saiba codigos transcritos na net são de dominio publico a menos que o autor explicitamente diga ao contrario ). INPI

Link para o comentário
Compartilhar em outros sites

  • 0
e caro Micheus

Eu não gostaria de ver alguma dica/artigo meu por aí, assinado por outra pessoa, esta é minha opnião - será que alguém gosta?

eu não disse que esse codigo era meu ( mas caso voce não saiba codigos transcritos na net são de dominio publico a menos que o autor explicitamente diga ao contrario ). INPI

é verdade, não disse, mas quando você não cita referências, pode dar a entender que seja.

Quanto a ser de domínio público, realmente você tem razão. Entretanto, ainda acho que por uma questão de respeito a quem teve o trabalho e tempo gastos para escrevê-lo, uma referência é o mínimo que podemos fazer como incentivo e reconhecimento.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola..Jonas..desculpe a demora em responder..ontem não consegui acesso ao forum.

... o servidor de email que eu usei é do bol, mas caso voce já tenha usado e não funcionou existe alguns exemplos no prorpio delphi

R. Ok vou testar de novo

Só uma perguntinha...hoje você tem este codigo em uso..e funciona perfeito??

muito Agradecido.

;)

Link para o comentário
Compartilhar em outros sites

  • 0

Voce tem o delphi 3 ? ele tem um demo chamado SIMPMAIL que funciona perfeitamente ... voce faz a conexão manualmente mas pode deixa-lo automatico e como ele tem os fontes voce pode modifica-lo. caso voce não tenha o delphi 3 me da seu email que te envio o dpr.

Link para o comentário
Compartilhar em outros sites

  • 0
procure os componentes numa das paletas, no delphi 3 e no 4 não me lembro em qual esta, mas existem sim, tanto que o demo era para o delphi 3.

R.: Pois..é...quando abro o aplicativo da a seguinte mensagem de erro:

class TSmtp not found. ignore the error and continue

e depois da o mesmo erro no:

class TPop not found. ignore the error and continue

Ou não to sabendo lidar com ao aplicativo :(

Grato

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...