Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中创建没有邮件会话的电子邮件_Java_Email_Jakarta Mail - Fatal编程技术网

在Java中创建没有邮件会话的电子邮件

在Java中创建没有邮件会话的电子邮件,java,email,jakarta-mail,Java,Email,Jakarta Mail,我想在我的应用程序中创建一个实用方法,它接受电子邮件作为参数,并知道如何发送它。此实用工具方法将负责知道哪个SMTP服务器要使用它应该使用的凭据来连接到它 我在使用javax.mail时遇到的问题是javax.mail.Message类和javax.mail.mimessage类需要一个javax.mail.Session对象作为构造函数的参数。所以我不能有像这样的方法签名 private static void sendMail(javax.mail.Message); 因为我的客户机类无法

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

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

private static void sendMail(javax.mail.Message);
因为我的客户机类无法在没有我试图抽象掉的所有细节的情况下构造消息。他们必须知道如何通过连接邮件服务器来创建会话

有没有一种方法可以在不使用会话的情况下创建邮件,或者创建一个封装不需要会话的电子邮件的类?

使用,可以将以下任何代码添加到sendMail方法中,具体取决于您希望设置的位置

    HtmlEmail email = new HtmlEmail();
    //email.setDebug(debugMode);
    email.setBounceAddress("bouce@domain.biz");
    email.setHostName("mySMTPHost");


    email.setFrom("myAddress@mydomain.com");
    email.addTo(emailAddress);
    email.addBcc("bccAddres");

    email.setSubject("Your Subject");
    email.setAuthentication("recipient@snailmail.org", "password");
    email.setSSL(true);
    email.setSmtpPort(465);
    email.setHtmlMsg(html);

public static void sendMail(org.apache.commons.mail.HtmlEmail email)
{       
    email.send();
}

与其让每个客户机自己创建消息类,不如让他们从实用程序类中获取消息对象。然后,实用程序类可以使用所需的会话信息构造消息对象。

MimeMessage类将接受空会话。如果您创建这样的消息,
Transport.send
可能无法将您的
MimeMessage
发送到您只需管理自己的会话和传输对象的解决方法,然后使用非静态的
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) {
        }
    }
}

如果您使用的是Spring framework/Spring boot,那么可以将Spring JavaMailSenderImpl注入到类中,并执行以下操作(显然,您也需要将SMTP服务器属性注入到邮件发送器中):

您需要将以下依赖项添加到应用程序中,才能使其正常工作:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

org.springframework.boot
春季启动邮件

您是否查看过ApacheCommons电子邮件包,或者设置为
javax.mail
?我使用ApacheCommons。我很乐意使用一个包含开源软件包的解决方案。本例中使用的库来自Apache Commons:。HTMLEmail是这些库的commons电子邮件组件中的一个类:在某些库中是否已经构建了这样的消息实用程序对象,或者这是我必须创建的对象?我认为您需要创建它。甚至spring也在JavaMailSenderImpl中使用会话对象。这个答案缺少一个代码示例,或者至少应该清楚地指出您所说的是什么实用程序类(-1)@BastianVoigt他显然是在说OP声明他要创建的实用程序类
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>