命令行输出: Sending email ..... Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/SharedByteArrayInputStream at mail.EmailSender.sendMultiPartMail(EmailSender.java:157) at mail.EmailSender.main(EmailSender.java:240)什么原因?编译没有错误,jmail的包已经导入
package com.xxx.helper.javamail;import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class EmailAuthenticator extends javax.mail.Authenticator
{
private String userName = null;
private String password = null; public void setUserName(String aUserName)
{
this.userName = aUserName;
} public void setPassword(String aPassword)
{
this.password = aPassword;
} public EmailAuthenticator()
{
super();
} public EmailAuthenticator(String aUserName, String aPassword)
{
super();
setUserName(aUserName);
setPassword(aPassword);
} //一定要有这个方法,它是在需要身份验证时自动被调用的
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(this.userName, this.password);
}
}
------------------------------------EmailSender.java-----------------------------------
package com.apsoft.helper.javamail;import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.SendFailedException;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.activation.FileDataSource;
import javax.activation.DataHandler;
import java.util.Date;
import java.util.Properties;
import java.io.File;
import java.io.UnsupportedEncodingException;
public class EmailSender
{
private Session session = null; private String mailFrom = null;
private String mailTo = null;
private String mailCc = null;
private String mailBcc = null; private String subject = null;
private String content = null; private String attachFile = null; private String mailHost = null;
private String userName = null;
private String password = null;
public EmailSender(String mailHost)
{
Properties prop = new Properties();
prop.put("mail.transport.protocol", "smtp");
prop.put("mail.smtp.host", mailHost); this.session = Session.getDefaultInstance(prop, null);
} public EmailSender(String mailHost, String userName, String password)
{
Properties prop = new Properties();
prop.put("mail.transport.protocol", "smtp");
prop.put("mail.smtp.host", mailHost);
prop.put("mail.smtp.auth", "true"); this.session = Session.getInstance(prop,
new EmailAuthenticator(userName, password));
// this.session.setDebug(true);
} public EmailSender(String mailHost, String proxyHost, int proxyPort)
{
Properties prop = new Properties();
prop.put("http.proxySet", "true" );
prop.put("http.proxyHost", proxyHost);
prop.put("http.proxyPort", String.valueOf(proxyPort));
prop.put("mail.transport.protocol", "smtp");
prop.put("mail.smtp.host", mailHost);
this.session = Session.getDefaultInstance(prop, null);
} public EmailSender(String mailHost, String userName, String password,
String proxyHost, int proxyPort)
{
Properties prop = new Properties();
prop.put("http.proxySet", "true" );
prop.put("http.proxyHost", proxyHost);
prop.put("http.proxyPort", String.valueOf(proxyPort));
prop.put("mail.transport.protocol", "smtp");
prop.put("mail.smtp.host", mailHost);
prop.put("mail.smtp.auth", "true"); this.session = Session.getDefaultInstance(prop,
new EmailAuthenticator(userName, password));
}
public void sendSimpleMail() throws MessagingException,SendFailedException
{
if(this.mailFrom == null)
{
throw new RuntimeException("NO MAIL FROM");
}
if(this.mailTo == null)
{
throw new RuntimeException("NO MAIL TO");
} MimeMessage mimeMsg = new MimeMessage(this.session); mimeMsg.setFrom(new InternetAddress(mailFrom) );
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailTo) ); if(mailCc != null)
{
mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(mailCc) );
} if(mailBcc != null)
{
mimeMsg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(mailBcc) );
} mimeMsg.setSubject(subject,"GBK");
mimeMsg.setText(content ,"GBK" );
mimeMsg.setSentDate(new Date()); Transport.send(mimeMsg);
}
//带附件
public void sendMultiPartMail()
throws MessagingException,SendFailedException,UnsupportedEncodingException
{
if(this.mailFrom == null)
{
throw new RuntimeException("NO MAIL FROM");
}
if(this.mailTo == null)
{
throw new RuntimeException("NO MAIL TO");
}
if(this.attachFile == null)
{
throw new RuntimeException("NO MAIL TO");
}
File file = new File(attachFile);
if(!file.canRead())
{
throw new RuntimeException("Can't find the attached file!");
} MimeMessage mimeMsg = new MimeMessage(this.session); mimeMsg.setFrom(new InternetAddress(mailFrom) );
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailTo) ); if(mailCc != null)
{
mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(mailCc) );
} if(mailBcc != null)
{
mimeMsg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(mailBcc) );
} mimeMsg.setSubject(subject,"GBK"); MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(content, "GBK"); MimeBodyPart mbp2 = new MimeBodyPart();
FileDataSource fds = new FileDataSource(this.attachFile);
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(MimeUtility.encodeWord(fds.getName())); MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2); mimeMsg.setContent(mp); mimeMsg.setSentDate(new Date()); Transport.send(mimeMsg); } public void setMailFrom(String mailFrom)
{
this.mailFrom = mailFrom;
} public void setMailTo(String mailTo)
{
this.mailTo = mailTo;
} public void setMailCc(String mailCc)
{
this.mailCc = mailCc;
} public void setMailBcc(String mailBcc)
{
this.mailBcc = mailBcc;
} public void setSubject(String subject)
{
this.subject = subject;
} public void setContent(String content)
{
this.content = content;
} public void setAttachFile(String attachFile)
{
this.attachFile = attachFile;
}
}
-------------------------------------------------------------------------
public static void main(String[] args)
{
try
{
EmailSender sender = new EmailSender("smtp.163.net", "username", "password"); sender.setMailFrom("[email protected]");
sender.setMailTo("[email protected]");
sender.setSubject("测试 java mail");
sender.setContent("测试the content of the mail");
sender.setAttachFile("D:\\test.txt");
System.out.println("Sending email .....");
sender.sendMultiPartMail();
System.out.println("success!");
}
catch(Exception e)
{
e.printStackTrace();
}
}
---------------------------------------------------------------------------
Sending email .....
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/SharedByteArrayInputStream
at mail.EmailSender.sendMultiPartMail(EmailSender.java:157)
at mail.EmailSender.main(EmailSender.java:240)什么原因?编译没有错误,jmail的包已经导入