【发布时间】:2020-02-26 09:32:59
【问题描述】:
我已完成教程并在端口 2525 上为入口和出口设置 GCP 防火墙。在我的机器上本地运行代码成功发送电子邮件但是,将项目部署到 App Engine Standard(Java 运行时)确实不抛出错误但也不发送电子邮件。
我还有一个 GCP VM 实例也可以发送电子邮件。有谁知道是什么原因造成的?
依赖关系: Dependencies
String email = "target@email.com";
String API_KEY = "KEY";
HttpResponse<JsonNode> req = Unirest.post("https://api.mailgun.net/v3/" + "my.custom.domain" + "/messages")
.basicAuth("api", API_KEY)
.field("from","Admin <admin@my.custom.domain>")
.field("to", email)
.field("subject","Welcome!")
.field("text", "testing")
.asJson();
req.getBody();
抛出:
Exception in thread "main" java.lang.ExceptionInInitializerError
at tech.incineratez.email.Main.main(Main.java:14)
Caused by: kong.unirest.UnirestException: It looks like you are using an
older version of Apache Http Client.
For security and performance reasons Unirest requires the most recent
version. Please upgrade.
at kong.unirest.Config.setDefaults(Config.java:109)
at kong.unirest.Config.<init>(Config.java:85)
at kong.unirest.Unirest.<clinit>(Unirest.java:30)
... 1 more
Caused by: java.lang.BootstrapMethodError: java.lang.IllegalAccessError:
no such constructor: kong.unirest.apache.ApacheAsyncClient.<init>
(Config)void/newInvokeSpecial
at kong.unirest.Config.setDefaults(Config.java:106)
... 3 more
Caused by: java.lang.IllegalAccessError: no such constructor:
kong.unirest.apache.ApacheAsyncClient.<init>(Config)void/newInvokeSpecial
at
java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:483)
... 4 more
Caused by: java.lang.NoClassDefFoundError:
org/apache/http/nio/reactor/ConnectingIOReactor
at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:975)
at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1000)
at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1394)
at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1750)
at
java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)
... 4 more
Caused by: java.lang.ClassNotFoundException: org.apache.http.nio.reactor.ConnectingIOReactor
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 10 more
如果在我的计算机上而不是在 Google Cloud Platform 上单独运行,则工作代码:
Properties props = System.getProperties();
props.put("mail.smtps.host", "smtp.mailgun.org");
props.put("mail.smtps.auth", "true");
props.put("mail.smtps.port", "2525");
Session session = Session.getInstance(props, null);
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("admin@my.custom.domain"));
InternetAddress[] addrs = InternetAddress.parse(email, false);
msg.setRecipients(Message.RecipientType.TO, addrs);
msg.setSubject("Welcome!");
msg.setText("Test");
msg.setSentDate(new Date());
SMTPTransport t = (SMTPTransport) session.getTransport("smtps");
t.connect("smtp.mailgun.org", "postmaster@my.custom.domain", "KEY");
t.sendMessage(msg, msg.getAllRecipients());
System.out.println("Email sent" + t.getLastServerResponse());
t.close();
上面的代码在谷歌云平台上运行时什么都不做。
【问题讨论】:
-
您应该使用 Mailgun 的 REST API 而不是尝试通过 SMTP 发送
-
我开始尝试使用他们的 API,结果导致数小时的调试错误并获得他们的依赖项所需的依赖项,但最终没有用。
-
好的,他们的 REST API确实工作,所以如果你打算使用 Mailgun,那么值得弄清楚。
-
我刚刚尝试使用他们的 API,确保所有依赖项都是最新的,但它向我抛出了:
Caused by: kong.unirest.UnirestException: It looks like you are using an older version of Apache Http Client. For security and performance reasons Unirest requires the most recent version. Please upgrade. at kong.unirest.Config.setDefaults(Config.java:109)和更多错误
标签: java google-app-engine google-cloud-platform smtp mailgun