发送邮件时,我无法从 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 发送密码重置电子邮件
为什么我无法从我在GCP中托管的应用使用Gmail SMTP发送电子邮件?