Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email Delphi 5与Indy一起发送电子邮件_Email_Delphi_Indy - Fatal编程技术网

Email Delphi 5与Indy一起发送电子邮件

Email Delphi 5与Indy一起发送电子邮件,email,delphi,indy,Email,Delphi,Indy,我试图用Delphi 5上的Indy 10发送一封电子邮件,结果是它不想验证,因为它向我显示了“Nooo”消息。到目前为止,我这里有这段代码(这是我从另一个堆栈溢出问题中得到的)。我不知道为什么它对我不起作用,因为它显然对另一个人起了作用。。。也许我遗漏了什么,我用我的两封实际邮件和密码替换了senderemail和receiveremail 编辑 这就是我现在所处的位置,它弹出了一个“必须先发出STARTTLS命令”。不过现在出现了一个错误。。。我真的很困惑这个 编辑2 所以我设法让它工作,这

我试图用Delphi 5上的Indy 10发送一封电子邮件,结果是它不想验证,因为它向我显示了“Nooo”消息。到目前为止,我这里有这段代码(这是我从另一个堆栈溢出问题中得到的)。我不知道为什么它对我不起作用,因为它显然对另一个人起了作用。。。也许我遗漏了什么,我用我的两封实际邮件和密码替换了senderemail和receiveremail

编辑

这就是我现在所处的位置,它弹出了一个“必须先发出STARTTLS命令”。不过现在出现了一个错误。。。我真的很困惑这个

编辑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;

请注意,
AuthType=satDefault
并不适用于所有服务器。它使用了
AUTH LOGIN
命令,这是不安全的,一些服务器已经放弃了对它的支持。您应该考虑使用<代码> AuthType = SATSASL< /COD>使用<代码> TIDSMTP。您不需要手动调用Authenticate(),gmail使用25465和587进行SMTP,但由于几乎所有的ISP都使用25465块和587块,因此gmail首选使用SSL进行SMTP,587块首选使用TLS端口进行SMTP。gmail可以使用不允许访问您的程序的设置-请尝试查找“访问不太安全的应用程序”在您的设置中。如果启用了双因素身份验证并创建了特定于应用程序的密码,则无需启用“对不太安全的应用程序的访问”。它告诉我“此设置需要SSL IOHandler”,即使我添加了“IdSMTP.IOHandler:=idsslohandlersocketopenssl1;”行。。。奇怪的是,“SSLHandler”应该是“idsslohandlersocketopenssl1”吗?好的,尝试移动
IdSMTP.IOHandler:=idsslohandlersocketopenssl1在顶部(请参阅更新)或尝试删除SSL IOHandler我在代码中没有看到任何会导致访问异常的内容。但是,请注意,
utUseExplicitTLS
在Gmail的端口25上不起作用,只在端口587上起作用。在端口465上,使用
utUseImplicitTLS
。在端口25上,改用
utNoTLSSupport
,不要分配SSL IOHandler。不管它现在是否工作!谢谢你们两位的帮助!