Enviar e-mail automaticamente ...
Olá amigos,
Não tenho conhecimento de como funcionam os SMTP´s, MAPI´s, etc ...
Mas gostaria que minha aplicação me enviasse, automaticamente, um e-mail em caso de erros críticos.
Tem alguma forma simples de enviar e-mail automaticamente pelo Delphi (e-mail´s simples só contendo texto) para minha conta de e-mail ?
Ps. Uso o Delphi 7.
Obrigado,
Abraços.
Não tenho conhecimento de como funcionam os SMTP´s, MAPI´s, etc ...
Mas gostaria que minha aplicação me enviasse, automaticamente, um e-mail em caso de erros críticos.
Tem alguma forma simples de enviar e-mail automaticamente pelo Delphi (e-mail´s simples só contendo texto) para minha conta de e-mail ?
Ps. Uso o Delphi 7.
Obrigado,
Abraços.
Francisco.riva1
Curtidas 0
Respostas
Rm
13/10/2007
Talvez para começar a responder tua pergunta...
Para mandar email segue dica que adaptei e usei com sucesso para enviar email com anexo (não é teu caso) pdf gerado por power PDF.
Pode adaptar e colocar para ser executada nas exceções .Falta ver como pegar o texto da exceção.
Espero que ajude..
No Delphi crie um novo projeto.
Salve a Unit com o nome UEmail e o projeto como Email.
Utilize os seguintes componentes:
3 Labels:
Altere as propriedades Caption respectivamente para: (Para, Assunto, Mensagem)
2 Edits
Altere as propriedades Name respectivamente para:(edtPara, edtAssunto);
Apague o conteúdo das propriedades Text;
1 ListBox
Altere a propriedade Name para:(lbxAnexos)
1 Componente Memo
Altere a propriedade Name para:(mmMensagem);
Apague o conteúdo da propriedade lines.
3 Componentes Bitbtn
Altere as propriedades Caption respectivamente para:(Anexar,Enviar,Fechar)
Altere as propriedades Name respectivamente para:(btAnexar,btEnviar,btFechar)
Agora insira um componente OpenDialog da palheta Dialogs
Altere a propriedade Name para:(odAnexos)
Insira um componente IdMessage, da palhete Indy Misc
Configure a propriedades From|Address com o email do remetente e From|Name com o
nome do remetente
Altere a propriedade Name para:(IdMessage)
Insira um componente IdSMTP da palheta IndyClients
Configure as propriedades Host com o endereço IP ou o DNS do servidor de email,
por exemplo: smtp.uol.com.br
Configure as propriedades Password e Username, para se autenticar no servidor,
caso seja necessário.
Altere a propriedade name para:(IdSMTP)
Agora vamos aos códigos:
No evento onclick do botão btAnexos:
procedure TForm1.btAnexarClick(Sender: Tobject);
begin
if odAnexos.Execute then
lbxAnexos.Items.Add(odAnexos.FileName);
end;
No evento onclick do botão btFechar:
procedure TForm1.btFecharClick(Sender: Tobject);
begin
Application.Terminate;
end;
No evento onclick do botão btEnviar:
procedure TForm1.btEnviarClick(Sender: TObject);
var Anexo : Integer;
begin
IdMessage.Recipients.EMailAddresses := edtPara.Text;
IdMessage.Subject := edtAssunto.Text;
IdMessage.Body := mmMensagem.Lines;
//Manipulando os Anexos
for Anexo := 0 to lbxAnexos.Items.Count-1 do
TIdAttachment.Create(idmessage.MessageParts, TFileName(lbxAnexos.Items.Strings[Anexo]));
IdSMTP.Connect;
try
IdSMTP.Send(IdMessage);
finally
IdSMTP.Disconnect;
end;
Application.MessageBox(´Email enviado com sucesso!´, ´Confirmação´,
MB_ICONINFORMATION + MB_OK);
end;
Valeu, até a próxima.
Alessandro Martarello
Fim da dica.
Saudações RM
Para mandar email segue dica que adaptei e usei com sucesso para enviar email com anexo (não é teu caso) pdf gerado por power PDF.
Pode adaptar e colocar para ser executada nas exceções .Falta ver como pegar o texto da exceção.
Espero que ajude..
No Delphi crie um novo projeto.
Salve a Unit com o nome UEmail e o projeto como Email.
Utilize os seguintes componentes:
3 Labels:
Altere as propriedades Caption respectivamente para: (Para, Assunto, Mensagem)
2 Edits
Altere as propriedades Name respectivamente para:(edtPara, edtAssunto);
Apague o conteúdo das propriedades Text;
1 ListBox
Altere a propriedade Name para:(lbxAnexos)
1 Componente Memo
Altere a propriedade Name para:(mmMensagem);
Apague o conteúdo da propriedade lines.
3 Componentes Bitbtn
Altere as propriedades Caption respectivamente para:(Anexar,Enviar,Fechar)
Altere as propriedades Name respectivamente para:(btAnexar,btEnviar,btFechar)
Agora insira um componente OpenDialog da palheta Dialogs
Altere a propriedade Name para:(odAnexos)
Insira um componente IdMessage, da palhete Indy Misc
Configure a propriedades From|Address com o email do remetente e From|Name com o
nome do remetente
Altere a propriedade Name para:(IdMessage)
Insira um componente IdSMTP da palheta IndyClients
Configure as propriedades Host com o endereço IP ou o DNS do servidor de email,
por exemplo: smtp.uol.com.br
Configure as propriedades Password e Username, para se autenticar no servidor,
caso seja necessário.
Altere a propriedade name para:(IdSMTP)
Agora vamos aos códigos:
No evento onclick do botão btAnexos:
procedure TForm1.btAnexarClick(Sender: Tobject);
begin
if odAnexos.Execute then
lbxAnexos.Items.Add(odAnexos.FileName);
end;
No evento onclick do botão btFechar:
procedure TForm1.btFecharClick(Sender: Tobject);
begin
Application.Terminate;
end;
No evento onclick do botão btEnviar:
procedure TForm1.btEnviarClick(Sender: TObject);
var Anexo : Integer;
begin
IdMessage.Recipients.EMailAddresses := edtPara.Text;
IdMessage.Subject := edtAssunto.Text;
IdMessage.Body := mmMensagem.Lines;
//Manipulando os Anexos
for Anexo := 0 to lbxAnexos.Items.Count-1 do
TIdAttachment.Create(idmessage.MessageParts, TFileName(lbxAnexos.Items.Strings[Anexo]));
IdSMTP.Connect;
try
IdSMTP.Send(IdMessage);
finally
IdSMTP.Disconnect;
end;
Application.MessageBox(´Email enviado com sucesso!´, ´Confirmação´,
MB_ICONINFORMATION + MB_OK);
end;
Valeu, até a próxima.
Alessandro Martarello
Fim da dica.
Saudações RM
GOSTEI 0
Francisco.riva1
13/10/2007
Olá RM,
A dica ajudou sim, mas ainda não consegui enviar o e-mail ...
Deu o seguinte erro: Socket Error # 11004, sabe o que pode ser ?
Abraços.
A dica ajudou sim, mas ainda não consegui enviar o e-mail ...
Deu o seguinte erro: Socket Error # 11004, sabe o que pode ser ?
Abraços.
GOSTEI 0
Rm
13/10/2007
Pode ser a definição do host tipo
smtp.nho.terra.com.br
revise o smtp de sua conta e coloque nas propriedades do componente.
Revise user e senha também
É o que me ocorre agora.
SDS/RM
smtp.nho.terra.com.br
revise o smtp de sua conta e coloque nas propriedades do componente.
Revise user e senha também
É o que me ocorre agora.
SDS/RM
GOSTEI 0
Massuda
13/10/2007
Socket Error # 11004
Basicamente é o que o RM escreveu sobre o nome do host.Esse erro significa que você informou um nome de host que parece ser válido mas não corresponde a um IP conhecido.
GOSTEI 0
Francisco.riva1
13/10/2007
Olá amigos,
Realmente eu tinha errado ao digitar o nome do Host do componente idSMTP, agora acertei e apareceu mais um erro vejam:
Must Authenticate!
devo estar com problema na autenticação certo ?
(Username e Password do componente idSMTP).
ps. peguei Username e Password de Outlook->ferramentas->contas->aba e-mail->propriedades->servidores->servidor de entrada de e-mails (nome da conta e senha)
é isso mesmo ?
Parecia muito simples enviar e-mail ... :(
Abraços,
Obrigado pela atenção.
Realmente eu tinha errado ao digitar o nome do Host do componente idSMTP, agora acertei e apareceu mais um erro vejam:
Must Authenticate!
devo estar com problema na autenticação certo ?
(Username e Password do componente idSMTP).
ps. peguei Username e Password de Outlook->ferramentas->contas->aba e-mail->propriedades->servidores->servidor de entrada de e-mails (nome da conta e senha)
é isso mesmo ?
Parecia muito simples enviar e-mail ... :(
Abraços,
Obrigado pela atenção.
GOSTEI 0
Powerlog Tecnologia
13/10/2007
Colega, veja se esse post te ajuda:
http://forum.devmedia.com.br/viewtopic.php?t=82873&highlight=mkmail
http://forum.devmedia.com.br/viewtopic.php?t=82873&highlight=mkmail
GOSTEI 0
Massuda
13/10/2007
devo estar com problema na autenticação certo ?
(Username e Password do componente idSMTP).
Para fazer login, mude a propriedade [b:6930f3f4b2]TIdSMTP.AuthType[/b:6930f3f4b2] para [b:6930f3f4b2]atLogin[/b:6930f3f4b2].GOSTEI 0
Francisco.riva1
13/10/2007
Olá amigos,
Muito obrigado pela paciência de todos ... agora funcionou ... o e-mail é enviado!
Vejam as propriedades principais que usei para enviar e-mail para o terra (utilizando o componente Indy presente no delphi 7):
No componente idSMTP:
AuthType = atLogin
Host = smtp.sjp.terra.com.br
Password = senha
Usuario = usuario
No componente idMessage:
Recipients.EMailAddresses := ´usuario@terra.com.br´;
From -> Address = usuario@terra.com.br
From -> Name = nome do usuario
PS. Interessante é que se no From -> Address (Remetente), coloco um e-mail diferente do destino, tipo: usuario@ig.com.br dá o seguinte erro:
<usuario@ig.com.br> Sender Address rejected: Access denied
Só funcionou com: From->Address = Recipients.EMailAddresses
(ou seja, Remetente = Destino)
Se quiserem resolver mais essa :(
Mas para o que precisava esta funcionando blz :)
Obrigado a todos.
Muito obrigado pela paciência de todos ... agora funcionou ... o e-mail é enviado!
Vejam as propriedades principais que usei para enviar e-mail para o terra (utilizando o componente Indy presente no delphi 7):
No componente idSMTP:
AuthType = atLogin
Host = smtp.sjp.terra.com.br
Password = senha
Usuario = usuario
No componente idMessage:
Recipients.EMailAddresses := ´usuario@terra.com.br´;
From -> Address = usuario@terra.com.br
From -> Name = nome do usuario
PS. Interessante é que se no From -> Address (Remetente), coloco um e-mail diferente do destino, tipo: usuario@ig.com.br dá o seguinte erro:
<usuario@ig.com.br> Sender Address rejected: Access denied
Só funcionou com: From->Address = Recipients.EMailAddresses
(ou seja, Remetente = Destino)
Se quiserem resolver mais essa :(
Mas para o que precisava esta funcionando blz :)
Obrigado a todos.
GOSTEI 0
Massuda
13/10/2007
<usuario@ig.com.br> Sender Address rejected: Access denied
O servidor SMTP está reclamando que o rementente é um email que não pertence ao domínio do servidor SMTP. No seu caso, o servidor é do Terra, mas o rementente é do iG. Isso é feito para impedir abusos por parte dos usuários.GOSTEI 0
Francisco.riva1
13/10/2007
Olá Massuda,
Isso significa que remetente e destino tem que ser do mesmo domínio do servidor SMTP (não necessariamente ter endereço idêntico). :)
Não seria natural o e-mail ter um remetente independente do destino (não importando se é terra, ig, uol, etc ... já que no caso do remetente apenas estar informando quem esta enviando o e-mail) ?
Abraços,
Isso significa que remetente e destino tem que ser do mesmo domínio do servidor SMTP (não necessariamente ter endereço idêntico). :)
Não seria natural o e-mail ter um remetente independente do destino (não importando se é terra, ig, uol, etc ... já que no caso do remetente apenas estar informando quem esta enviando o e-mail) ?
Abraços,
GOSTEI 0
Massuda
13/10/2007
Isso significa que remetente e destino tem que ser do mesmo domínio do servidor SMTP (não necessariamente ter endereço idêntico).
Não. Significa nesse caso que o remetente (sender, from) tem que ser do mesmo domínio do servidor SMTP. Note que existem servidores que não reclamam disso, pois ou não se importam que você abuse do servidor ou fazem algum outro tipo de verificação.Claro, pode ser que o administrador do seu servidor SMTP tenha imposto essa condição. Isso é relativamente comum, embora eu não espere que isso ocorra num servidor ´público´ como é o do Terra.
GOSTEI 0
Francisco.riva1
13/10/2007
Só se existir alguma configuração adicional caso o domínio seja diferente ...
Caso contrário, existe essa restrição no terra (smtp.sjp.terra.com.br), pois a única coisa que mudo é o From -> Address de usuario@terra.com.br (que funciona) para usuario@ig.com.br (que dá msg de advertência). :(
Abraços,
Francisco.
Caso contrário, existe essa restrição no terra (smtp.sjp.terra.com.br), pois a única coisa que mudo é o From -> Address de usuario@terra.com.br (que funciona) para usuario@ig.com.br (que dá msg de advertência). :(
Abraços,
Francisco.
GOSTEI 0
Massuda
13/10/2007
O que eu disse é que geralmente o remetente/from tem que ser do mesmo domínio do servidor SMTP, mas o destinatário/to pode ser qualquer um.
No seu caso, o servidor SMTP não vai deixar você enviar um email fingindo ser usuário do iG. Se você quer que qualquer resposta ao seu email vá para o iG, use a propriedade TIdMessage.ReplyTo.
No seu caso, o servidor SMTP não vai deixar você enviar um email fingindo ser usuário do iG. Se você quer que qualquer resposta ao seu email vá para o iG, use a propriedade TIdMessage.ReplyTo.
GOSTEI 0
Francisco.riva1
13/10/2007
Olá Massuda,
Agora que conseguiu entender o que vinha tentando explicar :( ...
´O que eu disse é que geralmente o remetente/from tem que ser do mesmo domínio do servidor SMTP, mas o destinatário/to pode ser qualquer um.´
Deixei o terra como remetente e coloquei o ig como destinatário, só para testar ... e funcionou !
Agora sim, entendido e funcionando :)
Muito obrigado pela atenção.
Abraços.
Agora que conseguiu entender o que vinha tentando explicar :( ...
´O que eu disse é que geralmente o remetente/from tem que ser do mesmo domínio do servidor SMTP, mas o destinatário/to pode ser qualquer um.´
Deixei o terra como remetente e coloquei o ig como destinatário, só para testar ... e funcionou !
Agora sim, entendido e funcionando :)
Muito obrigado pela atenção.
Abraços.
GOSTEI 0