【问题标题】:Java mail API works on localhost bu not on google app engineJava 邮件 API 适用于本地主机,但不适用于谷歌应用引擎
【发布时间】:2021-02-02 23:08:31
【问题描述】:

我有一个使用 Java Mail API 的发送电子邮件逻辑,当我在本地主机上时它工作正常,但一旦部署在谷歌云平台上,电子邮件会发送到我的 servlet,但从未送达。 我从 GoDaddy 购买了电子邮件,所以它是:xxx@mydomain.com。 在阅读了谷歌云平台上的文档和 StackOverflow 上的一些 cmets 后,我已经配置了防火墙规则,但似乎没有任何工作允许端口 25、465 和 587 上的入口和出口(我知道谷歌不允许端口 25 上的流量)。 我不想使用像 sendbird 这样的第 3 方电子邮件发件人......因为我之前使用过弹性并且我不需要第 3 方电子邮件发件人,JavaMail 就足够了。 所以我认为 Java 邮件对于 GCP 来说应该足够了。 谁能帮我吗? 这是我的发送电子邮件逻辑


import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 *
 * @author sidibe ibrahim
 * Sending email logic
 */
public class EmailSender {

    static MessagingException me;

    public static boolean sendMail(String from, String password, String message, String to[], String title) throws UnsupportedEncodingException {
        String host = "smtpout.secureserver.net";
        Properties props = System.getProperties();
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.user", from);
        props.put("mail.smtp.password", password);
        props.put("mail.smtp.host", 465);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.ssl.trust", "*");
        
        Session session = Session.getDefaultInstance(props, null);
        MimeMessage mimeMessage = new MimeMessage(session);
        try {
            mimeMessage.setFrom(new InternetAddress(from, "xxx"));
            InternetAddress[] toAddress = new InternetAddress[to.length];
            for (int i = 0; i < to.length; i++) {
                toAddress[i] = new InternetAddress(to[i]);
            }
            for (int i = 0; i < toAddress.length; i++) {
                mimeMessage.addRecipient(Message.RecipientType.TO, toAddress[i]);
            }
            //sdd subject
            mimeMessage.setSubject(title);

            //set message to mimeMessage
            mimeMessage.setText(message, "UTF-8", "html");
            Transport transport = session.getTransport("smtp");
            transport.connect(host, from, password);
            transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
            transport.close();
            return true;
        } catch (MessagingException m) {
            me.printStackTrace();
        }

        return false;
    }
}

【问题讨论】:

    标签: google-app-engine google-cloud-platform


    【解决方案1】:

    App Engine Mail API(也支持JavaMail已被弃用。

    相反,GCP recommends 使用第三方邮件提供商,例如:


    编辑

    但是,如果您仍想继续使用过时的解决方案,请参阅article 使用 Mail API 发送电子邮件。

    【讨论】:

    • 感谢您的回答丹尼斯,我已经尝试过了,但它不起作用,我认为这些步骤旨在接收电子邮件,我想要的是从我的应用程序发送电子邮件,例如发送确认电子邮件后向已购买商品的客户付款。
    • 你是对的 - 那是接收电子邮件的文章。我已经更新了我的答案,链接了用于发送电子邮件的答案。请记住,由于此解决方案已弃用,因此 GCP 并未正式支持它,您在使用它时可能会遇到一些不一致的情况。
    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 2019-11-07
    • 2014-03-01
    • 2017-10-09
    • 2016-01-14
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多