我正在做一个应用程序,用Java发送电子邮件,这是我的计算机科学课程的最终项目。正如许多在线教程所说,我已经导入了可以在此页面上下载的所有内容:https://javaee.github.io/javamail/#Download_JavaMail_Release这些jar文件都在我的类路径中。我完全按照教程进行操作,但是由于某种原因,我仍然遇到错误。这是SendEmail类的代码:
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
import javax.swing.*;
public class sendEmail {
public sendEmail() {
}
protected void send(String sender, String recipient, String password, String subject, String content) {
Properties prop = new Properties();
prop.put("mail.stmp.auth*", "true");// set the authentication to true
prop.put("mail.stmp.starttls.enable*", "true ");
prop.put("mail.stmp.host*", "stmp.gamil.com");
prop.put("mail.stmp.port*", "587");
Session ses = Session.getInstance(prop, new javax.mail.Authenticator() {
private PasswordAuthentication getPassWordAuthrntication() {
return new PasswordAuthentication(sender, password);
}
});
try {
Message msg = new MimeMessage(ses);
msg.setFrom(new InternetAddress(sender));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));
msg.setSubject(subject);
msg.setContent(content,"text/html;charset=utf-8");
Transport.send(msg);
sent();
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException m) {
throw new RuntimeException(m);
}
}
private void sent() { // a nitification saying that the email is //sucessfully sent
JDialog d = new JDialog();
d.setTitle("Notice");
d.setBounds(1366 / 2 - 100, 768 / 2 - 75, 200, 150);
JLabel label = new JLabel("Your Email has been sent!");
label.setHorizontalAlignment(SwingConstants.CENTER);
d.getContentPane().add(label);
d.setVisible(true);
}
}
这里是抛出的内容:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/activation/DataHandler
at sendEmail.send(sendEmail.java:26)
at EditEmail.send(EditEmail.java:120)
at EditEmail$buttonAction.actionPerformed(EditEmail.java:147)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
at java.desktop/java.awt.Component.processEvent(Component.java:6397)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2762)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.ClassNotFoundException: javax.activation.DataHandler
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 38 more
SendEmail是应该发送电子邮件的类,EditEmail只是调用SendMail中的方法。这是我的课程路径:Picture of the class folder properties
有两个javax.mail.jar文件
javax.mail.jar
javax.mail-1.6.2.jar
删除一个jar文件
只需从类路径中删除2.javax.mail-1.6.2.jar,一个友好的建议是不要使用通配符导入。
DataHandler来自JAF;它不是JavaMail的一部分。 JAF包含在JDK 1.8及更高版本中。您必须使用较新的JDK。您需要com.sun.activation:javax.activation:1.2.0。