错误:看不到软件包sun.net.smtp

时间:2019-06-20 10:07:07

标签: java javamail

我们正在将一些旧代码移至java11。我们正在创建一个smtp客户端。当我们使用java11时,coe编译会失败。

error: package sun.net.smtp is not visible
[javac]  sun.net.smtp.SmtpClient SMTP = new sun.net.smtp.SmtpClient(SMTP_SERVER);
[javac]                            ^
[javac]   (package sun.net.smtp is declared in module java.base, which 
does not export it)

看起来smtp包支持已从java11中删除。任何建议都会有所帮助。

关于, Akj

2 个答案:

答案 0 :(得分:1)

您可以使用JavaMail API发送电子邮件进行排序。转到下面的链接并下载.jar文件,并将其添加到您的项目中。如果没有,您可以将其添加为Maven依赖项。 https://mvnrepository.com/artifact/javax.mail/mail/1.4.7

按照以下示例与SMTP服务器进行对话并发送电子邮件的示例代码。

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("abc@abcmail.com"));
message.setRecipients(
  Message.RecipientType.TO, InternetAddress.parse("to@abcmail.com"));
message.setSubject("Mail Subject");

String msg = "This is a sample email ";

MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setContent(msg, "text/html");

Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mimeBodyPart);

message.setContent(multipart);

Transport.send(message);

您的配置可以通过Java属性对象完成

Properties prop = new Properties();
prop.put("mail.smtp.auth", true);
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.host", "smtp.abcmail.com");
prop.put("mail.smtp.port", "25");
prop.put("mail.smtp.ssl.trust", "smtp.abcmail.com");

答案 1 :(得分:0)

您应该使用JavaMail,这是一种Java API,用于通过SMTP,POP3和IMAP发送和接收电子邮件。

首先,看看有关使用Java here

发送邮件的Oracle文档。

以下示例代码摘自Oracle文档,并说明了如何使用JavaMail API发送电子邮件。

Properties props = new Properties();
props.put("mail.smtp.host", "my-mail-server");
Session session = Session.getInstance(props, null);

try {
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom("me@example.com");
    msg.setRecipients(Message.RecipientType.TO,
                      "you@example.com");
    msg.setSubject("JavaMail hello world example");
    msg.setSentDate(new Date());
    msg.setText("Hello, world!\n");
    Transport.send(msg, "me@example.com", "my-password");
} catch (MessagingException mex) {
    System.out.println("send failed, exception: " + mex);
}

另外,请注意,要使用Java Mail发送邮件,您需要有效的SMTP服务器和该服务器中的帐户。

相关问题