Java 使用谷歌应用程序引擎发送电子邮件

Java 使用谷歌应用程序引擎发送电子邮件,java,google-app-engine,Java,Google App Engine,我正试图通过一个servlet从Google App Engine发送电子邮件,代码如下。应用owner@gmail.com在“电子邮件API授权发件人”中列出。我没有收到任何错误,也没有收到任何电子邮件。我可以在日志中看到日志消息,因此我非常确定代码已经执行。知道我为什么没有收到任何电子邮件吗 package com.myapplication; import java.io.IOException; import java.util.Properties; import java.util

我正试图通过一个servlet从Google App Engine发送电子邮件,代码如下。应用owner@gmail.com在“电子邮件API授权发件人”中列出。我没有收到任何错误,也没有收到任何电子邮件。我可以在日志中看到日志消息,因此我非常确定代码已经执行。知道我为什么没有收到任何电子邮件吗

package com.myapplication;

import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
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;

public class SendMailServlet extends HttpServlet {

    final static Logger logger = Logger.getLogger(SendMailServlet.class.getName());

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        try {

            sendMail();

            logger.log(Level.INFO, "Send mail!");

        } catch (AddressException e) {
            logger.log(Level.WARNING, e.getMessage());
        } catch (MessagingException e) {
            logger.log(Level.WARNING, e.getMessage());
        }
    }

    private void sendMail() throws MessagingException {

        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        Message msg = new MimeMessage(session);

        msg.setFrom(new InternetAddress("application.owner@gmail.com"));
        msg.addRecipient(Message.RecipientType.TO, new InternetAddress("application.owner@gmail.com"));
        msg.setSubject("The subject");
        msg.setText("The message body");

        Transport.send(msg);
    }
}

您是在appspot.com(“in prod”)上运行,还是在本地运行?如果是后者,有充分的文件证明邮件实际上不会发送,除非您有自己的SMTP安装,并且在运行
dev_appserver
时使用
--SMTP
标志。我正在生产环境中运行(在appspot.com上,而不是在本地)。我只是将您的代码与我的工作代码进行了比较。这基本上是一样的,所以在代码方面这应该是可行的。但是,我看到您使用log
Level.FINE
记录异常。请检查您的
webapp/WEB-INF/logging.properties
文件是否设置为
FINE
FINEST
,以确保获取所有日志。我建议您将您的异常记录为警告或错误。关于日志级别,这一点很好,谢谢。这段代码几乎就是我在文档中找到的示例代码,所以我有点惊讶它不起作用。是否需要进行任何配置才能使其正常工作?还是其他需要满足的条件?@PatrikSalomonsson不太可能。发件人的电子邮件地址通常有一些限制,但由于您以所有者的身份发送,因此这不应该成为问题。更改日志记录后,日志是否包含异常?您是在appspot.com(“in prod”)上运行,还是在本地运行?如果是后者,有充分的文件证明邮件实际上不会发送,除非您有自己的SMTP安装,并且在运行
dev_appserver
时使用
--SMTP
标志。我正在生产环境中运行(在appspot.com上,而不是在本地)。我只是将您的代码与我的工作代码进行了比较。这基本上是一样的,所以在代码方面这应该是可行的。但是,我看到您使用log
Level.FINE
记录异常。请检查您的
webapp/WEB-INF/logging.properties
文件是否设置为
FINE
FINEST
,以确保获取所有日志。我建议您将您的异常记录为警告或错误。关于日志级别,这一点很好,谢谢。这段代码几乎就是我在文档中找到的示例代码,所以我有点惊讶它不起作用。是否需要进行任何配置才能使其正常工作?还是其他需要满足的条件?@PatrikSalomonsson不太可能。发件人的电子邮件地址通常有一些限制,但由于您以所有者的身份发送,因此这不应该成为问题。更改日志记录后,日志是否包含异常?