java - 在没有邮件 session 的情况下用 Java 创建电子邮件消息

标签 java email jakarta-mail

我想在我的应用程序中创建一个实用程序方法,它接受电子邮件消息作为参数并知道如何发送它。此实用程序方法将负责了解哪个 SMTP 服务器使用哪些凭据来连接它。

我在使用 javax.mail 时遇到的问题是 javax.mail.Message 类和 javax.mail.MimeMessageclass 需要一个 javax.mail.Session 对象作为构造函数的参数。所以我不能有像

这样的方法签名
private static void sendMail(javax.mail.Message);

因为如果没有我试图抽象掉的所有细节,我的客户端类将无法构建消息。他们必须知道如何通过连接到邮件服务器来创建 session 。

有没有办法在没有 session 的情况下创建消息,或者是否可以创建一个封装不需要 session 的电子邮件消息的类?

最佳答案

MimeMessage 类将接受空 session 。如果您创建这样的消息,Transport.send 可能无法发送您的 MimeMessage 要解决此问题,您只需管理自己的 session 和传输对象,然后使用非-静态 Transport.sendMessage 方法。

public void forward(Session session, Message m) throws MessagingException {
    Address[] all = m.getAllRecipients();
    if (all == null) { //Don't pass null to sendMessage.
        all = new InternetAddress[0];
    }

    Transport t;
    try {
        // Session properties 'mail.transport.protocol.rfc822'
        // and 'mail.transport.protocol' can be used to change
        // between SMTP or SMTPS.

        if (all.length != 0) {
            t = session.getTransport(all[0]);
        } else {
            t = session.getTransport();
        }
    } catch (NoSuchProviderException punt) {
        try {
            t = session.getTransport("smtp"); //Just a guess.
        } catch (NoSuchProviderException fail) {
            if (fail.setNextException(punt)) {
                throw fail;
            } else {
                punt.setNextException(fail);
                throw punt;
            }
        }
    }

    m.saveChanges(); //Computes additional headers.

    t.connect("host", 25, "user", "pass"); //Or use one of the many other connect method overloads.
    try {
        t.sendMessage(m, all);
    } finally {
        try {
            t.close();
        } catch (MessagingException warning) {
        }
    }
}

关于java - 在没有邮件 session 的情况下用 Java 创建电子邮件消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17557332/

相关文章:

java - 安卓代码: clarify button clicking facebook url must display

java - 在 Activity 之间传递 ResourceId 作为整数

c# - .Net SMTP 队列

php - 如何通过 PHP 知道电子邮件地址是否存在?

jsp - 普通 Java 对象可以利用/捕获/包含 JSP 输出吗?

java - Logentries + AWS 不兼容

java - 如何为 Java 类字段生成准确的泛型表达式?

java - 如何在 Spring Boot 中验证 Rest 请求

php - SMTP 错误 : Could not authenticate

java - 单元测试中 SerialContext 中的 'java:comp/env' 的 Tomcat -Hudson- 查找失败