发送邮件时,我无法从 Rest ful 中捕获错误

Posted

技术标签:

【中文标题】发送邮件时,我无法从 Rest ful 中捕获错误【英文标题】:I can't catch an error from a Rest ful when sending a mail 【发布时间】:2021-12-25 21:36:36 【问题描述】:

我有一个使用 WS 发送邮件的方法。如果电子邮件帐户是真实的,它可以正常工作,但如果电子邮件帐户不是真实的,它会通过 getResponseCode 返回 500 错误。 不好的是,它会向我显示一个带有指示错误的窗口。

在运行它之前,请确保运行以下方法:

ConnectionRequest.setHandleErrorCodesInGlobalErrorHandler(false);

我的方法:

public static Response imprimePedido(Long pedidoId) 
    String serverPost = "";
    Response<String> r = null;
    if (Preferences.get("correo_prueba", null) != null) 
        serverPost = SERVER_URL + "blank_factura_impresion_pdf/blank_factura_impresion_pdf.php?pedidoId=" + Long.toString(pedidoId) + "&correo_prueba=" + Preferences.get("correo_prueba", null);
     else 
        serverPost = SERVER_URL + "blank_factura_impresion_pdf/blank_factura_impresion_pdf.php?pedidoId=" + Long.toString(pedidoId);
    
    try 
        r = Rest.post(serverPost).
                header("token", Usuarioservice.getToken()).
                jsonContent().getAsString();
        if (r.getResponseCode() != 200) 
            System.out.println("No pude enviar correo");
            log("Error: " + r.getResponseErrorMessage());
        
     catch (Exception e) 
        e.printStackTrace();
    
    return r;

窗口错误:

【问题讨论】:

【参考方案1】:

ConnectionRequest.setHandleErrorCodesInGlobalErrorHandler(false); 仅适用于依赖于 Codename One 旧版本的不当行为的旧应用程序。所以,我建议你删除它。这个方法的目的记录在这里:https://www.codenameone.com/blog/terse-table-radar-chart-networking.html#_networking_enhancements

我想你的问题的原因是默认的网络错误监听器,它通常在 init() 中。它的代码是这样的:

        addNetworkErrorListener(err -> 
            // prevent the event from propagating
            err.consume();
            if(err.getError() != null) 
                Log.e(err.getError());
            
            Log.sendLogAsync();
            Dialog.show("Connection Error", "There was a networking error in the connection to " + err.getConnectionRequest().getUrl(), "OK", null);
        );

我建议您使用更好的错误管理来自定义该代码,就像我在这个答案中所说的那样:https://***.com/a/68773491

然而,这还不是全部。我在发送电子邮件时遇到了与您类似的问题。 500 错误不会让用户知道他们拼错了电子邮件地址。因此,我修改了服务器端代码以返回 200 代码,但响应消息不同,例如“正确发送”或“无效电子邮件地址”。这样,应用程序可以正确地通知用户并区分此类错误和其他错误。

【讨论】:

以上是关于发送邮件时,我无法从 Rest ful 中捕获错误的主要内容,如果未能解决你的问题,请参考以下文章

通过 Gmail REST API 发送的电子邮件/草稿无法在新的 Gmail 用户界面中打开

如何使用 django-rest-auth 和 Mailgun 从 Django 发送密码重置电子邮件

如何在 ActionMailer 中捕获错误异常

为什么我无法从我在GCP中托管的应用使用Gmail SMTP发送电子邮件?

当服务器在 try-catch 块中发送 422 时,axios 无法捕获错误

无法从 linux 终端发送电子邮件