Delphi 5 使用 Indy 发送电子邮件
Delphi 5 Send Email With Indy
我正在尝试在 Delphi 5 上使用 Indy 10 发送电子邮件,结果是它不想进行身份验证,因为它向我显示了 "Nooo" 消息。到目前为止,我这里有这段代码(这是我从另一个 Stack Overflow 问题中得到的)。我不确定为什么它对我不起作用,因为它显然对另一个人有用……也许我错过了什么,我用我的 2 个实际邮件和密码替换了 senderemail 和 receiveremail。
编辑
这就是我现在所在的位置,它现在弹出 "Must issue a STARTTLS command first." 错误但是...我真的对此感到困惑...
编辑 2
所以我成功了,这是最终结果。如果有什么地方做得不对,请随时告诉我...我遇到了访问冲突,直到我在发送消息之前添加了 "IdSMTP.Authenticate;" 行!
procedure TForm1.Button3Click(Sender: TObject);
var
IdSMTP: TIdSMTP;
Email: TIdMessage;
SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
IdSMTP := TIdSMTP.Create(nil);
SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
Email := TIdMessage.Create(nil);
try
SSLHandler.MaxLineAction := maException;
SSLHandler.SSLOptions.Method := sslvSSLv23;
SSLHandler.SSLOptions.Mode := sslmUnassigned;
SSLHandler.SSLOptions.VerifyMode := [];
SSLHandler.SSLOptions.VerifyDepth := 0;
IdSMTP.IOHandler := SSLHandler;
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Port := 587;
IdSMTP.Username := 'email@gmail.com';
IdSMTP.Password := 'password';
IdSMTP.UseTLS := utUseExplicitTLS;
Email.From.Address := 'email@gmail.com';
Email.Recipients.EmailAddresses := 'secondemail@gmail.com';
Email.Subject := 'Test subject';
Email.Body.Text := 'Test body';
IdSMTP.Connect;
if IdSMTP.Connected then
begin
IdSMTP.Authenticate;
IdSMTP.Send(Email);
IdSMTP.Disconnect;
end;
finally
Email.Free;
SSLHandler.Free;
IdSMTP.Free;
end;
end;
尝试使用此代码:
IdSMTP := TIdSMTP.Create(nil);
try
IdSMTP.UseTLS := utNoTLSSupport;
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Port := 25;
IdSMTP.AuthType := satDefault;
IdSMTP.Username := 'SenderEmail@gmail.com';
IdSMTP.Password := 'Password';
IdMessage := TIdMessage.Create(nil);
try
IdMessage.From.Name := 'My Name';
IdMessage.From.Address := 'SenderEmail@gmail.com';
IdMessage.Subject := 'E-mail subject';
IdMessage.Body.Add('E-mail body.');
IdMessage.Recipients.EMailAddresses := 'ReceiverEmail@gmail.com';
IdMessage.ReceiptRecipient.Name := 'Name';
if not IdSMTP.Connected then
IdSMTP.Connect;
IdSMTP.Send(IdMessage);
finally
IdMessage.Free;
IdSMTP.Disconnect;
end;
finally
IdSMTP.Free;
IdSSLIOHandlerSocketOpenSSL1.Free;
我正在尝试在 Delphi 5 上使用 Indy 10 发送电子邮件,结果是它不想进行身份验证,因为它向我显示了 "Nooo" 消息。到目前为止,我这里有这段代码(这是我从另一个 Stack Overflow 问题中得到的)。我不确定为什么它对我不起作用,因为它显然对另一个人有用……也许我错过了什么,我用我的 2 个实际邮件和密码替换了 senderemail 和 receiveremail。
编辑
这就是我现在所在的位置,它现在弹出 "Must issue a STARTTLS command first." 错误但是...我真的对此感到困惑...
编辑 2
所以我成功了,这是最终结果。如果有什么地方做得不对,请随时告诉我...我遇到了访问冲突,直到我在发送消息之前添加了 "IdSMTP.Authenticate;" 行!
procedure TForm1.Button3Click(Sender: TObject);
var
IdSMTP: TIdSMTP;
Email: TIdMessage;
SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
IdSMTP := TIdSMTP.Create(nil);
SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
Email := TIdMessage.Create(nil);
try
SSLHandler.MaxLineAction := maException;
SSLHandler.SSLOptions.Method := sslvSSLv23;
SSLHandler.SSLOptions.Mode := sslmUnassigned;
SSLHandler.SSLOptions.VerifyMode := [];
SSLHandler.SSLOptions.VerifyDepth := 0;
IdSMTP.IOHandler := SSLHandler;
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Port := 587;
IdSMTP.Username := 'email@gmail.com';
IdSMTP.Password := 'password';
IdSMTP.UseTLS := utUseExplicitTLS;
Email.From.Address := 'email@gmail.com';
Email.Recipients.EmailAddresses := 'secondemail@gmail.com';
Email.Subject := 'Test subject';
Email.Body.Text := 'Test body';
IdSMTP.Connect;
if IdSMTP.Connected then
begin
IdSMTP.Authenticate;
IdSMTP.Send(Email);
IdSMTP.Disconnect;
end;
finally
Email.Free;
SSLHandler.Free;
IdSMTP.Free;
end;
end;
尝试使用此代码:
IdSMTP := TIdSMTP.Create(nil);
try
IdSMTP.UseTLS := utNoTLSSupport;
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Port := 25;
IdSMTP.AuthType := satDefault;
IdSMTP.Username := 'SenderEmail@gmail.com';
IdSMTP.Password := 'Password';
IdMessage := TIdMessage.Create(nil);
try
IdMessage.From.Name := 'My Name';
IdMessage.From.Address := 'SenderEmail@gmail.com';
IdMessage.Subject := 'E-mail subject';
IdMessage.Body.Add('E-mail body.');
IdMessage.Recipients.EMailAddresses := 'ReceiverEmail@gmail.com';
IdMessage.ReceiptRecipient.Name := 'Name';
if not IdSMTP.Connected then
IdSMTP.Connect;
IdSMTP.Send(IdMessage);
finally
IdMessage.Free;
IdSMTP.Disconnect;
end;
finally
IdSMTP.Free;
IdSSLIOHandlerSocketOpenSSL1.Free;