Email Delphi 7 Indy 10 não está enviando
Olá, tenho o Delphi 7, atualizado Indy para 10 e instalado em meu computador com Windows 10. Já baixei as dlls libeay32.dll e ssleay32.dll na pasta System32 e quando tento enviar um email do gmail não consegue conectar.
De acordo como está meu código, aparece sempre a mensagem 'Falha no envio de email!' (está mensagem está logo abaixo da linha Connect() do meu código)
Precisaria de uma ajuda pra tentar solucionar o problema. Abaixo está o código tentando utilizar o stmp do gmail, mas tentei o hotmail e também não consegui.
O código está dentro do botão enviar.
procedure TForm1.BitBtnEnviarClick(Sender: TObject);
begin
BitBtnEnviar.Enabled := False;
Screen.Cursor:= crHourGlass;
//não quero enviar anexos
// if ListBoxAnexos.Items.Count > 0 then
// begin
// for i:= 0 to ListBoxAnexos.Items.Count - 1 do
// TIdAttachment.Create(IdMessage1.MessageParts, ListBoxAnexos.Items[i]);
// end;
IdMessage1.Clear;
IdMessage1 := TIdMessage.Create(Self);
// IdMessage1.CharSet := 'utf-8';
// IdMessage1.Encoding := meMIME;
// IdMessage1.ContentType := 'multipart/mixed';
IdMessage1.ContentType := 'text/plain'; //tentei text/html tb
IdMessage1.From.Name := 'MeuNome';
IdMessage1.From.Address:= 'meuemail@gmail.com';
IdMessage1.Subject:= 'teste';
IdMessage1.Date := Now;
IdMessage1.Recipients.Add;
IdMessage1.Recipients.EMailAddresses := 'paraquemqueroenviar@gmail.com';
// IdMessage1.BccList.EMailAddresses := EdtBCC.Text;
// IdMessage1.CCList.EMailAddresses := EdtCC.Text;
// IdMessage1.Body.Text := MemoEmailMensagem.Lines.Text;
IdMessage1.Body.Clear;
IdMessage1.Body.Add('Mensagemqualquer');
IdSMTP1.AuthType:= atNone;
IdSMTP1 := TIdSMTP.Create(Self);
IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.AuthenticationType := (tentei as 3 opções que existem: atDefault, atNone, atSASL);
IdSMTP1.Port := 465; // tentei também 587
IdSMTP1.Username := 'user@gmail.com';
IdSMTP1.Password := 'minhasenha';
try
if not IdSMTP1.Connected then
IdSMTP1.Connect(); //depois dessa linha, está saltando para a linha abaixo de "Falha no envio de email". Não consegue conectar.
IdSMTP1.Send(IdMessage1);
Application.ProcessMessages;
Application.MessageBox('Email enviado com sucesso!', 'Confirmação',MB_ICONINFORMATION + MB_OK);
except
//cai sempre nessa mensagem após a linha Connect()
Application.MessageBox('Falha no envio de email!', 'Alerta',MB_ICONWARNING + MB_OK);
end;
IdSMTP1.Disconnect;
IdSMTP1.Free;
IdMessage1.Free;
Screen.Cursor:= crDefault;
BitBtnEnviar.Enabled:= true;
Será que falta alguma biblioteca específica? Será que não funciona no Windows 10?
Precisaria muito resolver isso. Obrigado pela ajuda pessoal!
De acordo como está meu código, aparece sempre a mensagem 'Falha no envio de email!' (está mensagem está logo abaixo da linha Connect() do meu código)
Precisaria de uma ajuda pra tentar solucionar o problema. Abaixo está o código tentando utilizar o stmp do gmail, mas tentei o hotmail e também não consegui.
O código está dentro do botão enviar.
procedure TForm1.BitBtnEnviarClick(Sender: TObject);
begin
BitBtnEnviar.Enabled := False;
Screen.Cursor:= crHourGlass;
//não quero enviar anexos
// if ListBoxAnexos.Items.Count > 0 then
// begin
// for i:= 0 to ListBoxAnexos.Items.Count - 1 do
// TIdAttachment.Create(IdMessage1.MessageParts, ListBoxAnexos.Items[i]);
// end;
IdMessage1.Clear;
IdMessage1 := TIdMessage.Create(Self);
// IdMessage1.CharSet := 'utf-8';
// IdMessage1.Encoding := meMIME;
// IdMessage1.ContentType := 'multipart/mixed';
IdMessage1.ContentType := 'text/plain'; //tentei text/html tb
IdMessage1.From.Name := 'MeuNome';
IdMessage1.From.Address:= 'meuemail@gmail.com';
IdMessage1.Subject:= 'teste';
IdMessage1.Date := Now;
IdMessage1.Recipients.Add;
IdMessage1.Recipients.EMailAddresses := 'paraquemqueroenviar@gmail.com';
// IdMessage1.BccList.EMailAddresses := EdtBCC.Text;
// IdMessage1.CCList.EMailAddresses := EdtCC.Text;
// IdMessage1.Body.Text := MemoEmailMensagem.Lines.Text;
IdMessage1.Body.Clear;
IdMessage1.Body.Add('Mensagemqualquer');
IdSMTP1.AuthType:= atNone;
IdSMTP1 := TIdSMTP.Create(Self);
IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.AuthenticationType := (tentei as 3 opções que existem: atDefault, atNone, atSASL);
IdSMTP1.Port := 465; // tentei também 587
IdSMTP1.Username := 'user@gmail.com';
IdSMTP1.Password := 'minhasenha';
try
if not IdSMTP1.Connected then
IdSMTP1.Connect(); //depois dessa linha, está saltando para a linha abaixo de "Falha no envio de email". Não consegue conectar.
IdSMTP1.Send(IdMessage1);
Application.ProcessMessages;
Application.MessageBox('Email enviado com sucesso!', 'Confirmação',MB_ICONINFORMATION + MB_OK);
except
//cai sempre nessa mensagem após a linha Connect()
Application.MessageBox('Falha no envio de email!', 'Alerta',MB_ICONWARNING + MB_OK);
end;
IdSMTP1.Disconnect;
IdSMTP1.Free;
IdMessage1.Free;
Screen.Cursor:= crDefault;
BitBtnEnviar.Enabled:= true;
Será que falta alguma biblioteca específica? Será que não funciona no Windows 10?
Precisaria muito resolver isso. Obrigado pela ajuda pessoal!
Edney
Curtidas 0
Melhor post
Hélio Devmedia
19/10/2016
Sobre o fato de conseguir conectar (IdSMTP1.Connect(); ) mas não conseguir enviar a mensagem IdSMTP1.Send(IdMessage1) é porque você não está conseguindo escrever corretamente os dados necessários para cabeçalho e e mensagem no componente de mensagem. Este exemplo é verídico. roda mesmo no software que faço para meus clientes.
Veja este exemplo abaixo e você verá o que é preciso: segue o código fonte de um DataModule (pas e dfm) e outras Units.
unit UnitUtils.Email;
interface
type
TCriptografia = (tcSSL, tcTSL, tcNone);
TEmail = class
private
FID: integer;
FNome: String;
FEmail: string;
FUser: string;
Fsenha: string;
FPOP3: string;
FPOP3Porta: integer;
FPOP3SSL: boolean;
FSMTP: string;
FSMTPPorta: integer;
FSMTPCriptografia: TCriptografia;
FSMTPRequerAut: boolean;
FSMTPAutUser: string;
FSMTPAutSenha: string;
FTipo: string;
public
property Nome : String read FNome write FNome;
property Email : string read FEmail write FEmail;
property User : string read FUser write FUser;
property senha : string read Fsenha write Fsenha;
property POP3 : string read FPOP3 write FPOP3;
property POP3Porta : integer read FPOP3Porta write FPOP3Porta;
property POP3SSL : boolean read FPOP3SSL write FPOP3SSL;
property SMTP : string read FSMTP write FSMTP;
property SMTPPorta : integer read FSMTPPorta write FSMTPPorta;
property SMTPCriptografia : TCriptografia read FSMTPCriptografia write FSMTPCriptografia;
property SMTPRequerAut : boolean read FSMTPRequerAut write FSMTPRequerAut;
property SMTPAutUser : string read FSMTPAutUser write FSMTPAutUser;
property SMTPAutSenha : string read FSMTPAutSenha write FSMTPAutSenha;
end;
implementation
end.
------------------------------------------xxxxxxxxxxxx------------------xxxxxxxxxxxxxx-----------------xxxxxxx----------------------------------
(salvar arquivo abaixo como UdmEmailSMTP.pas)
object dmEmailSMTP: TdmEmailSMTP
OldCreateOrder = False
Height = 258
Width = 402
object Mensagem: TIdMessage
AttachmentEncoding = 'UUE'
BccList = <>
CCList = <>
Encoding = meDefault
FromList = <
item
end>
Recipients = <>
ReplyTo = <>
ConvertPreamble = True
Left = 208
Top = 32
end
object cnxSMTP: TIdSMTP
IOHandler = SSLHandler
OnWork = cnxSMTPWork
OnWorkBegin = cnxSMTPWorkBegin
SASLMechanisms = <>
Left = 56
Top = 32
end
object SSLHandler: TIdSSLIOHandlerSocketOpenSSL
Destination = ':25'
MaxLineAction = maException
Port = 25
DefaultPort = 0
SSLOptions.Method = sslvSSLv23
SSLOptions.SSLVersions = [sslvSSLv2, sslvSSLv3, sslvTLSv1]
SSLOptions.Mode = sslmUnassigned
SSLOptions.VerifyMode = []
SSLOptions.VerifyDepth = 0
Left = 128
Top = 32
end
end
---------------------------------xxxx---------------------------xxx----------------------------------xxx---------------------------------------------
unit UdmEmailSMTP;
interface
uses
System.SysUtils, System.Classes, IdMessage, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, WinInet,
IdSMTPBase, IdSMTP, IdServerIOHandler, IdSSLOpenSSL, IdIOHandler, IdSSL , iniFiles,
IdIOHandlerSocket, IdIOHandlerStack, Dialogs, IdAttachmentFile, Vcl.Forms, IdGlobal,
UnitUtils.Email, Vcl.ComCtrls, UnitUtils.Email.functions;
type
TdmEmailSMTP = class(TDataModule)
Mensagem: TIdMessage;
cnxSMTP: TIdSMTP;
SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
procedure cnxSMTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
procedure cnxSMTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
private
FEmail: TEmail;
FProgressBar: TProgressBar;
procedure setMensagem(EmailDestinatario, Assunto, Corpo : String; Anexos: TStringList);
public
constructor Create(AOwner: TComponent; Email: TEmail; progresbar: TProgressBar);
function EnviaEmail(EmailDestinatario, Assunto, Corpo : String; Anexos: TStringList): Boolean;
end;
implementation
var
byytesToTransfer: integer;
{$R *.dfm}
{ TdmEmailSMTP }
procedure TdmEmailSMTP.cnxSMTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
if Assigned(FProgressBar) then
FProgressBar.Position := AWorkCount;
end;
procedure TdmEmailSMTP.cnxSMTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
if FProgressBar<>nil then
begin
FProgressBar.Position := 0;
if AWorkCountMax > 0 then
FProgressBar.Max := AWorkCountMax
else
FProgressBar.Max := byytesToTransfer;
end;
end;
constructor TdmEmailSMTP.Create(AOwner: TComponent; Email: TEmail; progresbar: TProgressBar);
begin
inherited Create(Aowner);
FEmail:=Email;
FProgressBar:=progresbar;
end;
function TdmEmailSMTP.EnviaEmail(EmailDestinatario, Assunto, Corpo: String; Anexos: TStringList): Boolean;
var
i: integer;
function getAutSMTP: TIdSMTPAuthenticationType;
begin
if FEmail.SMTPRequerAut then
result:= satDefault
else
Result :=satNone;
end;
begin
result:=false;
setMensagem(EmailDestinatario, assunto, Corpo, Anexos);
//Configurando a Conexão
cnxSMTP.Host := FEmail.Smtp;
cnxSMTP.Username := FEmail.User;
cnxSMTP.Password := FEmail.senha;
cnxSMTP.AuthType := getAutSMTP;
cnxSMTP.Port := FEmail.SMTPPorta;
cnxSMTP.UseTLS := utNoTLSSupport;
cnxSMTP.IOHandler:=nil;
if FEmail.SMTPCriptografia=tcTSL then
begin
SSLHandler.MaxLineAction := maException;
SSLHandler.SSLOptions.Method := sslvSSLv23;
SSLHandler.SSLOptions.Mode := sslmClient;
SSLHandler.SSLOptions.VerifyMode := [];
SSLHandler.SSLOptions.VerifyDepth := 0;
cnxSMTP.IOHandler := SSLHandler;
SSLHandler.Destination:=EmailDestinatario;
cnxSMTP.UseTLS := utUseExplicitTLS;
end
else
begin
if FEmail.SMTPCriptografia=tcSSL then
begin
SSLHandler.MaxLineAction := maException;
SSLHandler.SSLOptions.Method := sslvSSLv23;
SSLHandler.SSLOptions.Mode := sslmClient;
SSLHandler.SSLOptions.VerifyMode := [];
SSLHandler.SSLOptions.VerifyDepth := 0;
cnxSMTP.IOHandler := SSLHandler;
SSLHandler.Destination:=EmailDestinatario;
cnxSMTP.
Veja este exemplo abaixo e você verá o que é preciso: segue o código fonte de um DataModule (pas e dfm) e outras Units.
unit UnitUtils.Email;
interface
type
TCriptografia = (tcSSL, tcTSL, tcNone);
TEmail = class
private
FID: integer;
FNome: String;
FEmail: string;
FUser: string;
Fsenha: string;
FPOP3: string;
FPOP3Porta: integer;
FPOP3SSL: boolean;
FSMTP: string;
FSMTPPorta: integer;
FSMTPCriptografia: TCriptografia;
FSMTPRequerAut: boolean;
FSMTPAutUser: string;
FSMTPAutSenha: string;
FTipo: string;
public
property Nome : String read FNome write FNome;
property Email : string read FEmail write FEmail;
property User : string read FUser write FUser;
property senha : string read Fsenha write Fsenha;
property POP3 : string read FPOP3 write FPOP3;
property POP3Porta : integer read FPOP3Porta write FPOP3Porta;
property POP3SSL : boolean read FPOP3SSL write FPOP3SSL;
property SMTP : string read FSMTP write FSMTP;
property SMTPPorta : integer read FSMTPPorta write FSMTPPorta;
property SMTPCriptografia : TCriptografia read FSMTPCriptografia write FSMTPCriptografia;
property SMTPRequerAut : boolean read FSMTPRequerAut write FSMTPRequerAut;
property SMTPAutUser : string read FSMTPAutUser write FSMTPAutUser;
property SMTPAutSenha : string read FSMTPAutSenha write FSMTPAutSenha;
end;
implementation
end.
------------------------------------------xxxxxxxxxxxx------------------xxxxxxxxxxxxxx-----------------xxxxxxx----------------------------------
(salvar arquivo abaixo como UdmEmailSMTP.pas)
object dmEmailSMTP: TdmEmailSMTP
OldCreateOrder = False
Height = 258
Width = 402
object Mensagem: TIdMessage
AttachmentEncoding = 'UUE'
BccList = <>
CCList = <>
Encoding = meDefault
FromList = <
item
end>
Recipients = <>
ReplyTo = <>
ConvertPreamble = True
Left = 208
Top = 32
end
object cnxSMTP: TIdSMTP
IOHandler = SSLHandler
OnWork = cnxSMTPWork
OnWorkBegin = cnxSMTPWorkBegin
SASLMechanisms = <>
Left = 56
Top = 32
end
object SSLHandler: TIdSSLIOHandlerSocketOpenSSL
Destination = ':25'
MaxLineAction = maException
Port = 25
DefaultPort = 0
SSLOptions.Method = sslvSSLv23
SSLOptions.SSLVersions = [sslvSSLv2, sslvSSLv3, sslvTLSv1]
SSLOptions.Mode = sslmUnassigned
SSLOptions.VerifyMode = []
SSLOptions.VerifyDepth = 0
Left = 128
Top = 32
end
end
---------------------------------xxxx---------------------------xxx----------------------------------xxx---------------------------------------------
unit UdmEmailSMTP;
interface
uses
System.SysUtils, System.Classes, IdMessage, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, WinInet,
IdSMTPBase, IdSMTP, IdServerIOHandler, IdSSLOpenSSL, IdIOHandler, IdSSL , iniFiles,
IdIOHandlerSocket, IdIOHandlerStack, Dialogs, IdAttachmentFile, Vcl.Forms, IdGlobal,
UnitUtils.Email, Vcl.ComCtrls, UnitUtils.Email.functions;
type
TdmEmailSMTP = class(TDataModule)
Mensagem: TIdMessage;
cnxSMTP: TIdSMTP;
SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
procedure cnxSMTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
procedure cnxSMTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
private
FEmail: TEmail;
FProgressBar: TProgressBar;
procedure setMensagem(EmailDestinatario, Assunto, Corpo : String; Anexos: TStringList);
public
constructor Create(AOwner: TComponent; Email: TEmail; progresbar: TProgressBar);
function EnviaEmail(EmailDestinatario, Assunto, Corpo : String; Anexos: TStringList): Boolean;
end;
implementation
var
byytesToTransfer: integer;
{$R *.dfm}
{ TdmEmailSMTP }
procedure TdmEmailSMTP.cnxSMTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
if Assigned(FProgressBar) then
FProgressBar.Position := AWorkCount;
end;
procedure TdmEmailSMTP.cnxSMTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
if FProgressBar<>nil then
begin
FProgressBar.Position := 0;
if AWorkCountMax > 0 then
FProgressBar.Max := AWorkCountMax
else
FProgressBar.Max := byytesToTransfer;
end;
end;
constructor TdmEmailSMTP.Create(AOwner: TComponent; Email: TEmail; progresbar: TProgressBar);
begin
inherited Create(Aowner);
FEmail:=Email;
FProgressBar:=progresbar;
end;
function TdmEmailSMTP.EnviaEmail(EmailDestinatario, Assunto, Corpo: String; Anexos: TStringList): Boolean;
var
i: integer;
function getAutSMTP: TIdSMTPAuthenticationType;
begin
if FEmail.SMTPRequerAut then
result:= satDefault
else
Result :=satNone;
end;
begin
result:=false;
setMensagem(EmailDestinatario, assunto, Corpo, Anexos);
//Configurando a Conexão
cnxSMTP.Host := FEmail.Smtp;
cnxSMTP.Username := FEmail.User;
cnxSMTP.Password := FEmail.senha;
cnxSMTP.AuthType := getAutSMTP;
cnxSMTP.Port := FEmail.SMTPPorta;
cnxSMTP.UseTLS := utNoTLSSupport;
cnxSMTP.IOHandler:=nil;
if FEmail.SMTPCriptografia=tcTSL then
begin
SSLHandler.MaxLineAction := maException;
SSLHandler.SSLOptions.Method := sslvSSLv23;
SSLHandler.SSLOptions.Mode := sslmClient;
SSLHandler.SSLOptions.VerifyMode := [];
SSLHandler.SSLOptions.VerifyDepth := 0;
cnxSMTP.IOHandler := SSLHandler;
SSLHandler.Destination:=EmailDestinatario;
cnxSMTP.UseTLS := utUseExplicitTLS;
end
else
begin
if FEmail.SMTPCriptografia=tcSSL then
begin
SSLHandler.MaxLineAction := maException;
SSLHandler.SSLOptions.Method := sslvSSLv23;
SSLHandler.SSLOptions.Mode := sslmClient;
SSLHandler.SSLOptions.VerifyMode := [];
SSLHandler.SSLOptions.VerifyDepth := 0;
cnxSMTP.IOHandler := SSLHandler;
SSLHandler.Destination:=EmailDestinatario;
cnxSMTP.
GOSTEI 1
Mais Respostas
Hélio Devmedia
13/10/2016
Olá Ednei, o problema na realidade não está no seu código, mas num novo recurso de segurança realizado no gmail. E como eles não avisam nada, quebrei muito a cabeça para descobrir.
Eu precisei entrar no meu perfil do google,
Delpos fui em Minha conta,
Em seguida cliquei em login e segurança,
e procurei por uma opção chamada : Permitir aplicativos menos seguros
deixei ela ativada e pronto, começou a funcionar...
Espero que também te ajude.
Se te ajudar, dê um joinha para eu saber.
Eu precisei entrar no meu perfil do google,
Delpos fui em Minha conta,
Em seguida cliquei em login e segurança,
e procurei por uma opção chamada : Permitir aplicativos menos seguros
deixei ela ativada e pronto, começou a funcionar...
Espero que também te ajude.
Se te ajudar, dê um joinha para eu saber.
GOSTEI 0
Hélio Devmedia
13/10/2016
E não se esqueça que o gmail exige autenticação e de preferência o SSL
GOSTEI 0
Edney
13/10/2016
Olá, alterei a configuração no meu gmail e agora está conforme me falou.
O que significa autenticação SSL? Poderia ser mais específico, pois sou amador no Delphi.
Agora, depois da linha "IdSMTP1.Connect();" ele disse que não encontrava o arquivo IdReplySMTP.pas, ai coloquei o caminho e rodei denovo, ai me pediu o IdIOHandler.pas, quando coloquei o caminho "C:\\Program Files\\Borland\\Indy 10 for Delphi 7\\Source\\Core\\IdIOHandler.pas" e rodei denovo, está agora abrindo a aba IdIOHandler e selecionando a linha "raise EIdConnClosedGracefully.Create(RSConnectionClosedGracefully);"
Se eu altero a porta para 587 ele consegue passar pela linha "IdSMTP1.Connect();" mas quando rodo a próxima linha "IdSMTP1.Send(IdMessage1); ", ai abre a aba IdReplySMTP.pas e aparece a seguinte mensagem:
Project: Project1.exe raised exception class EIdSMTPReplyError with message ". Process stopped. Use step or run to continue.
Será que estou apontando errado para esses arquivos IdIOHandler.pas, IdRepplySMTP.pas (apontei pra mais um .pas tb mas não lembro o nome)?
Alguma configuração específica que está faltando eu fazer será?
Já quebrei a cabeça demais. Socorro!
O que significa autenticação SSL? Poderia ser mais específico, pois sou amador no Delphi.
Agora, depois da linha "IdSMTP1.Connect();" ele disse que não encontrava o arquivo IdReplySMTP.pas, ai coloquei o caminho e rodei denovo, ai me pediu o IdIOHandler.pas, quando coloquei o caminho "C:\\Program Files\\Borland\\Indy 10 for Delphi 7\\Source\\Core\\IdIOHandler.pas" e rodei denovo, está agora abrindo a aba IdIOHandler e selecionando a linha "raise EIdConnClosedGracefully.Create(RSConnectionClosedGracefully);"
Se eu altero a porta para 587 ele consegue passar pela linha "IdSMTP1.Connect();" mas quando rodo a próxima linha "IdSMTP1.Send(IdMessage1); ", ai abre a aba IdReplySMTP.pas e aparece a seguinte mensagem:
Project: Project1.exe raised exception class EIdSMTPReplyError with message ". Process stopped. Use step or run to continue.
Será que estou apontando errado para esses arquivos IdIOHandler.pas, IdRepplySMTP.pas (apontei pra mais um .pas tb mas não lembro o nome)?
Alguma configuração específica que está faltando eu fazer será?
Já quebrei a cabeça demais. Socorro!
GOSTEI 0
Dirceu Morais
13/10/2016
Edney só por curiosidade, você está tentando passar email por qual qual provedor?
Pergunto, porque eu estava tentando passar email pelo yahoo e não conseguia, quebrei a cabeça por algumas horas, pensei que fosse problema no meu fonte.
Troquei o email para o hotmail e pronto.
Olhei no meu e-mail do yahoo e chegou essa mensagem para mim:
Pergunto, porque eu estava tentando passar email pelo yahoo e não conseguia, quebrei a cabeça por algumas horas, pensei que fosse problema no meu fonte.
Troquei o email para o hotmail e pronto.
Olhei no meu e-mail do yahoo e chegou essa mensagem para mim:
Alguém tentou entrar em sua conta do Yahoo (digitosistemas) de um app que não atende aos padrões de segurança do Yahoo. Bloqueamos essa tentativa de login, que foi feita em:
qua, 19 de out de 2016 17:51 BRST de Brasil.
Se você estava tentando fazer login em sua conta, realize uma destas ações:
Opção 1 (recomendada): Use mail.yahoo.com ou o app do Yahoo Mail para Android e iOS para acessar sua conta com mais segurança.
Opção 2 (não recomendada) Se ainda quiser usar um app que utiliza um método de acesso menos seguro para fazer login em sua conta do Yahoo:
Clique aqui: https://login.yahoo.com/account/security#other-apps
Ative a opção «Permitir apps que usam métodos de login menos seguros»
Volte para seu aplicativo de e-mail e faça login novamente em sua conta do Yahoo.
Usar apps que não atendam aos padrões de segurança recomendados pelo Yahoo pode deixar sua conta mais vulnerável ou menos segura.
Se você não tentou fazer login, clique aqui https://edit.yahoo.com/config/change_pw e altere a senha de sua conta.
Para obter mais informações, acesse nossa página de ajuda em: https://help.yahoo.com/******.
Atenciosamente,
Yahoo
qua, 19 de out de 2016 17:51 BRST de Brasil.
Se você estava tentando fazer login em sua conta, realize uma destas ações:
Opção 1 (recomendada): Use mail.yahoo.com ou o app do Yahoo Mail para Android e iOS para acessar sua conta com mais segurança.
Opção 2 (não recomendada) Se ainda quiser usar um app que utiliza um método de acesso menos seguro para fazer login em sua conta do Yahoo:
Clique aqui: https://login.yahoo.com/account/security#other-apps
Ative a opção «Permitir apps que usam métodos de login menos seguros»
Volte para seu aplicativo de e-mail e faça login novamente em sua conta do Yahoo.
Usar apps que não atendam aos padrões de segurança recomendados pelo Yahoo pode deixar sua conta mais vulnerável ou menos segura.
Se você não tentou fazer login, clique aqui https://edit.yahoo.com/config/change_pw e altere a senha de sua conta.
Para obter mais informações, acesse nossa página de ajuda em: https://help.yahoo.com/******.
Atenciosamente,
Yahoo
GOSTEI 0
Edney
13/10/2016
Olá Dirceu,
tentei com o gmail e com o hotmail. Com nenhum consegui.
Já desinstalei e reinstalei o Delphi 7 e Indy 10 duas vezes e não obtive sucesso. To achando que o problema está no Windows 10 que está instalado em meu computador.
Se quiser dar mais detalhes de suas versões e até quem sabe o código fonte, seria bem vindo.
De qualquer forma vou tentar com o RAD Studio Xe7 pra ver se levo mais sorte.
Grato!
tentei com o gmail e com o hotmail. Com nenhum consegui.
Já desinstalei e reinstalei o Delphi 7 e Indy 10 duas vezes e não obtive sucesso. To achando que o problema está no Windows 10 que está instalado em meu computador.
Se quiser dar mais detalhes de suas versões e até quem sabe o código fonte, seria bem vindo.
De qualquer forma vou tentar com o RAD Studio Xe7 pra ver se levo mais sorte.
Grato!
GOSTEI 0
Hélio Devmedia
13/10/2016
Sobre o SSL:
SSL é um tipo de segurança e criptografia que vai codificar a mensagem e pedir algum tipo de certificado digital quando enviar o e-mail. para que isso ocorra, as portas ficam diferentes, as vezes o endereço SMTP fica diferente e por aí vai. Você precisará configurar os dados do indy de acordo e o servidor de e-mail deverá fornecer as informações necessárias de porta, servidor e outros.
Espero ter sido útil. Se fui, marque um joinha para eu saber.
SSL é um tipo de segurança e criptografia que vai codificar a mensagem e pedir algum tipo de certificado digital quando enviar o e-mail. para que isso ocorra, as portas ficam diferentes, as vezes o endereço SMTP fica diferente e por aí vai. Você precisará configurar os dados do indy de acordo e o servidor de e-mail deverá fornecer as informações necessárias de porta, servidor e outros.
Espero ter sido útil. Se fui, marque um joinha para eu saber.
GOSTEI 0
Hélio Devmedia
13/10/2016
[b] CONTINUANDO..... PORQUE TEM LIMITE DE TEXTO [/B]
------------------xxx------------------------------xxxxxxx----------------------xxxxxxxxxxxxx-------------------------xxxxxxx------------
e na hora de chamar no sistema faça o seguinte...
pode usar este código Avontade.
Se fui útil peço duas coisas que marque um joinha nas minhas mensagens para eu ver que resolvi e compartilhe esta solução...
SSLHandler.Destination:=EmailDestinatario;
cnxSMTP.UseTLS := utUseImplicitTLS;
end;
end;
try
try
cnxSMTP.Connect;
cnxSMTP.Authenticate;
if cnxSMTP.Connected and cnxSMTP.DidAuthenticate then
cnxSMTP.Send(Mensagem)
else
ShowMessage('Não foi possível enviar o email para ' + EmailDestinatario + '. Verifique as configurações da conta!');
Result:=true;
except on e:exception do
begin
cnxSMTP.Disconnect;
ShowMessage('Ocorreu um erro ao enviar o e-mail:' + #13 + E.message);
end;
end;
finally
cnxSMTP.Disconnect;
end;
end;
procedure TdmEmailSMTP.setMensagem(EmailDestinatario, Assunto, Corpo: String; Anexos: TStringList);
var
i: integer;
begin
//Montando a Mensagem
Mensagem.From.Name := FEmail.Nome;
Mensagem.From.Address := FEmail.Email;
Mensagem.Priority := mpHighest;
Mensagem.Subject := Assunto;
Mensagem.ContentType := 'text/html';
Mensagem.CharSet := 'utf-8';
//Mensagem.CharSet := 'ISO-8859-1'; //Idioma Português BR (necessário para sair acentuado)
Mensagem.Encoding := meMIME;
Mensagem.Recipients.EMailAddresses := EmailDestinatario;
Mensagem.Body.Clear;
Mensagem.Body.Add(Corpo);
//Confirmação de Leitura
//if chResposta.Checked then
//begin
Mensagem.ReceiptRecipient.Text := Mensagem.From.Text; {Auto resposta}
//end;
//Anexos
if Anexosnil then
begin
if Anexos.Count>0 then
begin
for i := 0 to Anexos.Count-1 do
TIdAttachmentFile.Create(Mensagem.MessageParts, TFileName(Anexos[i]));
end;
end;
end;
end.
------------------xxx------------------------------xxxxxxx----------------------xxxxxxxxxxxxx-------------------------xxxxxxx------------
e na hora de chamar no sistema faça o seguinte...
procedure TFrmMovOS.ButtonOnClick(Sender: TObject); //(aqui é o evento do botão)
var
email: TEmail;
u: TdmEmailSMTP;
assunto: string;
corpo, destinatarios: string;
I: Integer;
begin
//os textos são fictícios
inherited;
corpo:='texto texto texto, aceita html
texto texto texto';
email:= TEmail.create;
email.Nome :='Tecnocoisa - Departamento Comercial';
email.Email:='comercial@tecnocoisa.com.br';
email.User :='comercial@tecnocoisa.com.br';
email.senha:='tecnocoisa%tecnocoisa';
email.POP3 :='vps.tecnocoisa.com.br';
email.POP3Porta:=995;
email.POP3SSL :=true;
email.SMTP :='vps.tecnocoisa.com.br';
email.SMTPPorta :=465;
email.SMTPCriptografia :=tcSSL;
email.SMTPRequerAut :=True;
email.SMTPAutUser :='comercial@tecnocoisa.com.br';
email.SMTPAutSenha :='tecnocoisa%tecnocoisa';
u:=TdmEmailSMTP.Create(self,email,nil);
assunto:='[tecnocoisa-PEDIDO DE coisas]EMPRESA xxx (cod yyy)';
u.EnviaEmail('destinatario@gmail.com',assunto,corpo,nil);
end;
pode usar este código Avontade.
Se fui útil peço duas coisas que marque um joinha nas minhas mensagens para eu ver que resolvi e compartilhe esta solução...
GOSTEI 0
Edney
13/10/2016
Olá pessoal,
no Delphi 7 não consegui enviar nem por nada e-mail, mesmo atualizando para Indy 10. Instalei então o Delphi RAD Studio Xe7 e mesmo assim não estava indo. O que me salvou foi o link abaixo, que mostra exatamente como tem que ser. Acho que tem crepe no Delphi para enviar email, mas de qualquer forma sigam o link abaixo quem precisar enviar email no Delhi XE.
http://www.andrecelestino.com/delphi-xe-envio-de-e-mail-com-componentes-indy/
De qualquer maneira, caso o link um dia saia do ar, vou deixar a programação aqui embaixo:
Essa primeira parte é para o Gmail. No rodapé está as mudanças necessárias para o Hotmail
//USES PARA ENVIO
uses
IdSMTP, IdSSLOpenSSL, IdMessage, IdText, IdAttachmentFile,
IdExplicitTLSClientServerBase;
//CÓDIGO GMAIL
var
// variáveis e objetos necessários para o envio
IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
IdSMTP: TIdSMTP;
IdMessage: TIdMessage;
IdText: TIdText;
sAnexo: string;
begin
// instanciação dos objetos
IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
IdSMTP := TIdSMTP.Create(Self);
IdMessage := TIdMessage.Create(Self);
try
// Configuração do protocolo SSL (TIdSSLIOHandlerSocketOpenSSL)
IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
IdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
// Configuração do servidor SMTP (TIdSMTP)
IdSMTP.IOHandler := IdSSLIOHandlerSocket;
IdSMTP.UseTLS := utUseImplicitTLS;
IdSMTP.AuthType := satDefault;
IdSMTP.Port := 465;
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Username := 'usuario@gmail.com';
IdSMTP.Password := 'senha';
// Configuração da mensagem (TIdMessage)
IdMessage.From.Address := 'remetente@gmail.com';
IdMessage.From.Name := 'Nome do Remetente';
IdMessage.ReplyTo.EMailAddresses := IdMessage.From.Address;
IdMessage.Recipients.Add.Text := 'destinatario1@email.com';
IdMessage.Recipients.Add.Text := 'destinatario2@email.com'; // opcional
IdMessage.Recipients.Add.Text := 'destinatario3@email.com'; // opcional
IdMessage.Subject := 'Assunto do e-mail';
IdMessage.Encoding := meMIME;
// Configuração do corpo do email (TIdText)
IdText := TIdText.Create(IdMessage.MessageParts);
IdText.Body.Add('Corpo do e-mail');
IdText.ContentType := 'text/plain; charset=iso-8859-1';
// Opcional - Anexo da mensagem (TIdAttachmentFile)
sAnexo := 'C:\\Anexo.pdf';
if FileExists(sAnexo) then
begin
TIdAttachmentFile.Create(IdMessage.MessageParts, sAnexo);
end;
// Conexão e autenticação
try
IdSMTP.Connect;
IdSMTP.Authenticate;
except
on E:Exception do
begin
MessageDlg('Erro na conexão ou autenticação: ' +
E.Message, mtWarning, [mbOK], 0);
Exit;
end;
end;
// Envio da mensagem
try
IdSMTP.Send(IdMessage);
MessageDlg('Mensagem enviada com sucesso!', mtInformation, [mbOK], 0);
except
On E:Exception do
begin
MessageDlg('Erro ao enviar a mensagem: ' +
E.Message, mtWarning, [mbOK], 0);
end;
end;
finally
// desconecta do servidor
IdSMTP.Disconnect;
// liberação da DLL
UnLoadOpenSSLLibrary;
// liberação dos objetos da memória
FreeAndNil(IdMessage);
FreeAndNil(IdSSLIOHandlerSocket);
FreeAndNil(IdSMTP);
end;
end;
Para o Hotmail, alterar as seguintes linhas:
// HOTMAIL
IdSMTP.UseTLS := utUseExplicitTLS;
IdSMTP.AuthType := satDefault;
IdSMTP.Port := 587;
IdSMTP.Host := 'smtp.live.com';
IdSMTP.Username := 'usuario@hotmail.com';
IdSMTP.Password := 'senha';
IdMessage.From.Address := 'usuario@hotmail.com';
Valeu pessoal, espero ter ajudado!
no Delphi 7 não consegui enviar nem por nada e-mail, mesmo atualizando para Indy 10. Instalei então o Delphi RAD Studio Xe7 e mesmo assim não estava indo. O que me salvou foi o link abaixo, que mostra exatamente como tem que ser. Acho que tem crepe no Delphi para enviar email, mas de qualquer forma sigam o link abaixo quem precisar enviar email no Delhi XE.
http://www.andrecelestino.com/delphi-xe-envio-de-e-mail-com-componentes-indy/
De qualquer maneira, caso o link um dia saia do ar, vou deixar a programação aqui embaixo:
Essa primeira parte é para o Gmail. No rodapé está as mudanças necessárias para o Hotmail
//USES PARA ENVIO
uses
IdSMTP, IdSSLOpenSSL, IdMessage, IdText, IdAttachmentFile,
IdExplicitTLSClientServerBase;
//CÓDIGO GMAIL
var
// variáveis e objetos necessários para o envio
IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
IdSMTP: TIdSMTP;
IdMessage: TIdMessage;
IdText: TIdText;
sAnexo: string;
begin
// instanciação dos objetos
IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
IdSMTP := TIdSMTP.Create(Self);
IdMessage := TIdMessage.Create(Self);
try
// Configuração do protocolo SSL (TIdSSLIOHandlerSocketOpenSSL)
IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
IdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
// Configuração do servidor SMTP (TIdSMTP)
IdSMTP.IOHandler := IdSSLIOHandlerSocket;
IdSMTP.UseTLS := utUseImplicitTLS;
IdSMTP.AuthType := satDefault;
IdSMTP.Port := 465;
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Username := 'usuario@gmail.com';
IdSMTP.Password := 'senha';
// Configuração da mensagem (TIdMessage)
IdMessage.From.Address := 'remetente@gmail.com';
IdMessage.From.Name := 'Nome do Remetente';
IdMessage.ReplyTo.EMailAddresses := IdMessage.From.Address;
IdMessage.Recipients.Add.Text := 'destinatario1@email.com';
IdMessage.Recipients.Add.Text := 'destinatario2@email.com'; // opcional
IdMessage.Recipients.Add.Text := 'destinatario3@email.com'; // opcional
IdMessage.Subject := 'Assunto do e-mail';
IdMessage.Encoding := meMIME;
// Configuração do corpo do email (TIdText)
IdText := TIdText.Create(IdMessage.MessageParts);
IdText.Body.Add('Corpo do e-mail');
IdText.ContentType := 'text/plain; charset=iso-8859-1';
// Opcional - Anexo da mensagem (TIdAttachmentFile)
sAnexo := 'C:\\Anexo.pdf';
if FileExists(sAnexo) then
begin
TIdAttachmentFile.Create(IdMessage.MessageParts, sAnexo);
end;
// Conexão e autenticação
try
IdSMTP.Connect;
IdSMTP.Authenticate;
except
on E:Exception do
begin
MessageDlg('Erro na conexão ou autenticação: ' +
E.Message, mtWarning, [mbOK], 0);
Exit;
end;
end;
// Envio da mensagem
try
IdSMTP.Send(IdMessage);
MessageDlg('Mensagem enviada com sucesso!', mtInformation, [mbOK], 0);
except
On E:Exception do
begin
MessageDlg('Erro ao enviar a mensagem: ' +
E.Message, mtWarning, [mbOK], 0);
end;
end;
finally
// desconecta do servidor
IdSMTP.Disconnect;
// liberação da DLL
UnLoadOpenSSLLibrary;
// liberação dos objetos da memória
FreeAndNil(IdMessage);
FreeAndNil(IdSSLIOHandlerSocket);
FreeAndNil(IdSMTP);
end;
end;
Para o Hotmail, alterar as seguintes linhas:
// HOTMAIL
IdSMTP.UseTLS := utUseExplicitTLS;
IdSMTP.AuthType := satDefault;
IdSMTP.Port := 587;
IdSMTP.Host := 'smtp.live.com';
IdSMTP.Username := 'usuario@hotmail.com';
IdSMTP.Password := 'senha';
IdMessage.From.Address := 'usuario@hotmail.com';
Valeu pessoal, espero ter ajudado!
GOSTEI 1