【发布时间】:2019-07-29 13:17:09
【问题描述】:
我正在创建一个更大的程序,每当事件发生时都会向用户帐户发送电子邮件,而现在我只专注于使电子邮件发送工作。
现在,我让它在 IDE (IntelliJ) 中完美运行,没有错误或警告,但是在我 jar 文件并在 terminal 中运行它之后,每次程序尝试时都会出错发送电子邮件。
我假设我把文件弄错了,因为它在IDE 中工作得很好,但我不太确定。我查找了与我类似的问题,但没有找到可行的解决方案。
这是terminal 中存在问题的文件
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();
}
}
每当我在terminal 中运行.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");
有人知道我该如何解决这个问题吗?
【问题讨论】:
-
查看this question的答案是否有帮助。
-
@PM77-1 不幸的是,这并没有帮助。我相信我已经将所有必需的依赖项正确添加到
.jar。但我可能总是错的
标签: java cmd jar jakarta-mail executable-jar