gpt4 book ai didi

java - 程序在 IDE 中运行,但不是作为 .jar 文件运行

转载 作者:行者123 更新时间:2023-12-02 10:10:16 24 4
gpt4 key购买 nike

我正在创建一个更大的程序,每当事件发生时就会将电子邮件发送到用户帐户,现在我只专注于使电子邮件发送工作正常。

现在,我让它在 IDE (IntelliJ) 中完美运行,没有错误或警告,但在我 jar 文件并在 中运行它之后>terminal 每次程序尝试发送电子邮件时,我都会收到错误。

我假设我把文件弄错了,因为它在 IDE 中工作得很好,但我不太确定。我已经查找了与我类似的问题,但尚未找到可行的解决方案。

这是终端中存在问题的文件

package handler;

import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import java.util.Properties;

public class Sender {

private Sender(){}

private static final String SENDERS_GMAIL = "myemail@email.com";
private static final String SENDERS_PASSWORD = "mypassword";

private static final String RECEIEVES_EMAIL = "myemail@email.com";

private static Properties mailServerProperties;
private static Session mailSession;
private static MimeMessage mailMessage;

public static void sendMail(String emailBody) throws Throwable
{
mailServerProperties = System.getProperties();
mailServerProperties.put("mail.smtp.port", "587");
mailServerProperties.put("mail.smtp.auth", "true");
mailServerProperties.put("mail.smtp.starttls.enable", "true");

mailSession = Session.getDefaultInstance(mailServerProperties);

mailMessage = new MimeMessage(mailSession);
mailMessage.addRecipient(RecipientType.BCC, new InternetAddress(RECEIEVES_EMAIL));
mailMessage.setSubject("Test Email");
mailMessage.setContent(emailBody, "text/html");

Transport transport = mailSession.getTransport("smtp");
transport.connect("smtp.gmail.com", SENDERS_GMAIL, SENDERS_PASSWORD);
transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
transport.close();
}
}

每当我在终端中运行.jar时,这就是我得到的错误:

    C:\Users\genlap\EmailSender>java -jar SendEmail.jar
javax.mail.NoSuchProviderException: No provider for smtp
at javax.mail.Session.getProvider(Session.java:460)
at javax.mail.Session.getTransport(Session.java:655)
at javax.mail.Session.getTransport(Session.java:636)
at handler.Sender.sendMail(Sender.java:37)
at handler.ManageService.run(ManageService.java:32)
at java.lang.Thread.run(Unknown Source)
Message failed to be sent.

错误中调用的 Sender 文件中的行是

Transport transport = mailSession.getTransport("smtp");

有人知道我该如何解决这个问题吗?

最佳答案

您要么没有在 SendEmail.jar 中包含依赖项,要么缺少指向它们的 MANIFEST.MF 条目。由于从命令行执行 java -jar 时,IntelliJ 用于构建和运行应用程序的依赖项不可用。

最简单的方法是创建一个包含所有依赖项的 fat JAR。如果你使用Maven,你可以看看this answer或使用Maven Shade Plugin .

关于java - 程序在 IDE 中运行,但不是作为 .jar 文件运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55047416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com