基本身份验证最近被 Microsoft 删除。 Oracle 应用程序是否可以通过其他方式从 Hotmail 帐户使用 SMTP?

问题描述 投票:0回答:1

我使用的是 Oracle 21.C。多年来我一直使用 Oracle 的 UTIL_SMTP 从 Hotmail 帐户发送邮件。 据我了解,微软最近取消了以微软身份登录的“基本身份验证”。 微软似乎没有针对单用户 hotmail 帐户的替代方案。 有谁知道使用 Oracle 的 SMTP 向 Microsoft 进行身份验证的方法吗? 这是我的示例代码:

--This test procedure now fails on the utl_smtp.auth statement on line 65
DECLARE
    l_smtp_hostname       varchar2(1024);
    l_smtp_port           varchar2(1024);
    l_wallet_path         varchar2(1024);
    l_wallet_password     varchar2(1024);
    l_domain              varchar2(1024);
    l_smtp_username       varchar2(1024);
    l_smtp_password       varchar2(1024);
    l_source_app          varchar2(1024);
    l_location            varchar2(1024);
    l_smtp_conn           utl_smtp.connection;
    l_smtp_reply          utl_smtp.reply;
    l_smtp_replies        utl_smtp.replies;
BEGIN
    l_smtp_hostname     := 'outlook.office365.com';
    l_smtp_port         := '587';
    l_domain            := 'hotmail.com';
    l_smtp_username     := '[email protected]';
    l_smtp_password     := 'mYpASSWORD';
    l_source_app        := '111';
    l_wallet_path       := 'My Wallet Path';
    l_wallet_password   := 'My Wallet Password';

    -- Open the initial connection
    l_location := 'utl_smtp.OPEN_CONNECTION';
    l_smtp_reply := utl_smtp.open_connection 
        ( host                              => l_smtp_hostname
        , port                              => l_smtp_port
        , c                                 => l_smtp_conn
        , wallet_path                       => l_wallet_path
        , wallet_password                   => l_wallet_password
        , secure_connection_before_smtp     => FALSE
        ); 
    If l_smtp_reply.code != 220
    Then
        Insert into mail_error_log (err_code, err_msg, transaction_type, 
                    transaction_detail, source_app, code_location) 
            values (l_smtp_reply.code, l_smtp_reply.text, 'utl_smtp', 
            l_smtp_reply.code, l_source_app, l_location);
            commit;    
    End If;

    --Send the first EHLO
    l_location := 'utl_smtp.EHLO - First';
    l_smtp_replies := utl_smtp.ehlo(l_smtp_conn, l_smtp_hostname);
    --Send the StartTLS command
    l_location := 'utl_smtp.STARTTLS';
    l_smtp_reply := utl_smtp.starttls(l_smtp_conn);
    If l_smtp_reply.code != 220
      Then
        Insert into mail_error_log (err_code, err_msg, transaction_type, 
                    transaction_detail, source_app, code_location) 
            values (l_smtp_reply.code, l_smtp_reply.text, 'utl_smtp', 
            l_smtp_reply.code, l_source_app, l_location);
            commit;    
    End If;

    --Send the second EHLO command    
    l_location := 'utl_smtp.EHLO - Second';
    l_smtp_replies := utl_smtp.ehlo(l_smtp_conn, l_domain);

    --Send the Authentication statement 
    l_location := 'utl_smtp.AUTH';
    l_smtp_reply := utl_smtp.auth(l_smtp_conn, l_smtp_username, l_smtp_password, utl_smtp.all_schemes);
    If l_smtp_reply.code != 235
    Then
        Insert into mail_error_log (err_code, err_msg, transaction_type, 
                    transaction_detail, source_app, code_location) 
            values (l_smtp_reply.code, l_smtp_reply.text, 'utl_smtp', 
            l_smtp_reply.code, l_source_app, l_location);
            commit;    
    End If;

    --Call the Quit statement
    utl_smtp.quit(l_smtp_conn);

EXCEPTION
    When    utl_smtp.transient_error
       Or utl_smtp.permanent_error
    Then
      Begin
        utl_smtp.quit(l_smtp_conn);
      Exception
        When    utl_smtp.transient_error
          Or utl_smtp.permanent_error
        Then
          Null;
      End;
END;
plsql outlook hotmail smtp-auth
1个回答
0
投票

此问题的解决方案是代理 SMTP 服务器,然后使用高级身份验证使用 hotmail 帐户发送邮件。例如,代理可以是 postfix 的本地实例,甚至可以是更简单的东西。

© www.soinside.com 2019 - 2024. All rights reserved.