gpt4 book ai didi

delphi - 将 INDY 10 SMTP 与 Office365 结合使用

转载 作者:行者123 更新时间:2023-12-03 14:56:52 27 4
gpt4 key购买 nike

我不熟悉 INDY SMTP 组件。我想使用 INDY 和 Office 365 发送邮件。这是一个很好的主题,对我帮助很大:What do the SMTP Indy component security and authentication properties do?但我不知道如何使用 SASL。 Office365 地址是 smtp.office365.com,端口 587 和 TLS。因此,我向表单添加了 SMTP 和 OpenSSL-IOHandler 并设置了属性。但我没有工作,应用程序只是卡住了。我需要知道如何将 SASL 与 Office365 结合使用。

谢谢。

最佳答案

Office365 仅支持 TLS 端口 587 上的LOGIN SASL。

当我刚刚尝试时,以下代码对我来说效果很好(所有这些设置也可以在设计时设置):

  1. TIdSMTP.AuthType 属性设置为 satDefault,这将使用 SMTP AUTH LOGIN 命令:

    var
    idSMTP1: TIdSMTP;
    begin
    idSMTP1 := TIdSMTP.Create(nil);
    try
    idSMTP1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSMTP1);
    idSMTP1.UseTLS := utUseExplicitTLS;
    TIdSSLIOHandlerSocketOpenSSL(idSMTP1.IOHandler).SSLOptions.Method := sslvSSLv3;

    idSMTP1.Host := 'smtp.office365.com';
    idSMTP1.Port := 587;

    idSMTP1.AuthType := satDefault;
    idSMTP1.Username := ...;
    idSMTP1.Password := ...;

    try
    idSMTP1.Connect;
    try
    idSMTP1.Authenticate;
    finally
    idSMTP1.Disconnect;
    end;
    ShowMessage('OK');
    except
    on E: Exception do
    begin
    ShowMessage(Format('Failed!'#13'[%s] %s', [E.ClassName, E.Message]));
    raise;
    end;
    end;
    finally
    idSMTP1.Free;
    end;
  2. TIdSMTP.AuthType 属性设置为 satSASL 并使用 TIdSASLLogin,它使用相同的 SMTP AUTH LOGIN命令:

    var
    idSMTP1: TIdSMTP;
    idSASLLogin: TIdSASLLogin;
    idUserPassProvider: TIdUserPassProvider;
    begin
    idSMTP1 := TIdSMTP.Create(nil);
    try
    idSMTP1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSMTP1);
    idSMTP1.UseTLS := utUseExplicitTLS;
    TIdSSLIOHandlerSocketOpenSSL(idSMTP1.IOHandler).SSLOptions.Method := sslvSSLv3;

    idSMTP1.Host := 'smtp.office365.com';
    idSMTP1.Port := 587;

    idSASLLogin := TIdSASLLogin.Create(idSMTP1);
    idUserPassProvider := TIdUserPassProvider.Create(idSASLLogin);

    idSASLLogin.UserPassProvider := idUserPassProvider;
    idUserPassProvider.Username := ...;
    idUserPassProvider.Password := ...;

    idSMTP1.AuthType := satSASL;
    idSMTP1.SASLMechanisms.Add.SASL := idSASLLogin;

    try
    idSMTP1.Connect;
    try
    idSMTP1.Authenticate;
    finally
    idSMTP1.Disconnect;
    end;
    ShowMessage('OK');
    except
    on E: Exception do
    begin
    ShowMessage(Format('Failed!'#13'[%s] %s', [E.ClassName, E.Message]));
    raise;
    end;
    end;
    finally
    idSMTP1.Free;
    end;

更新:Office365 不再支持 SSL v3,您现在必须使用 TLS v1.x:

(idSMTP1.IOHandler).SSLOptions.Method := sslvTLSv1;

关于delphi - 将 INDY 10 SMTP 与 Office365 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17734414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com