将 INDY 10 SMTP 与 Office365 一起使用 [英] Using INDY 10 SMTP with Office365

查看:30
本文介绍了将 INDY 10 SMTP 与 Office365 一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不熟悉 INDY SMTP 组件.我想用 INDY 和 Office 365 发送邮件.这是一个很好的话题,对我有很大帮助:SMTP Indy 组件安全和身份验证属性有什么作用?但是我没有弄清楚如何使用SASL.Office365 地址是 smtp.office365.com,端口为 587 和 TLS.所以我在表单中添加了一个 SMTP 和一个 OpenSSL-IOHandler 并设置了属性.但我没有工作,应用程序只是冻结.我需要知道如何在 Office365 中使用 SASL.

I'm not familar with the INDY SMTP component. I want to send a mail with INDY and Office 365. Here is a nice topic which helped me a lot: What do the SMTP Indy component security and authentication properties do? But I did not figured out how to use SASL. Office365 adress is smtp.office365.com with port 587 and TLS. So I added an SMTP and an OpenSSL-IOHandler to my form and setted the properties. But I didn't work, the app is just freezing. I need to know how to use SASL with Office365.

谢谢.

推荐答案

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

Office365 only supports the LOGIN SASL on TLS port 587.

以下代码在我刚尝试时运行良好(所有这些设置也可以在设计时设置):

The following code works fine for me when I just tried it (all of these settings can also be set up at design-time as well):

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

  1. setting the TIdSMTP.AuthType property to satDefault, which uses the SMTP AUTH LOGIN command:

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;

  • TIdSMTP.AuthType 属性设置为 satSASL 并使用 TIdSASLLogin,它使用相同的 SMTP AUTH LOGIN 命令:

  • setting the TIdSMTP.AuthType property to satSASL and using TIdSASLLogin, which uses the same SMTP AUTH LOGIN command:

    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:

    Update: Office365 no longer supports SSL v3, you must use TLS v1.x now:

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

    这篇关于将 INDY 10 SMTP 与 Office365 一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆