下载后解压,将mail.jar和activation.jar放到project里的lib文件夹中,为其配置环境变量,或在myEclipse里的"Java Build Path"中将其添加到"Libraries"。
project里有三个类:入口类(TestJavaMail)、邮件信息类(MailBean)和发送邮件类(SendMail)
MailBean.java
packagetest3;

importjava.util.Vector;

publicclassMailBean{

privateString to;//收件人
privateString from;//发件人
privateString host;//SMTP主机
privateString username;//发件人的用户名
privateString password;//发件人的密码
privateString subject;//邮件主题
privateString content;//邮件正文
Vectorfile;//多个附件
privateString filename;//附件的文件名
publicString getTo(){
returnto;
}
publicvoidsetTo(String to){
this.to=to;
}
publicString getFrom(){
returnfrom;
}
publicvoidsetFrom(String from){
this.from=from;
}
publicString getHost(){
returnhost;
}
publicvoidsetHost(String host){
this.host=host;
}
publicString getUsername(){
returnusername;
}
publicvoidsetUsername(String username){
this.username=username;
}
publicString getPassword(){
returnpassword;
}
publicvoidsetPassword(String password){
this.password=password;
}
publicString getSubject(){
returnsubject;
}
publicvoidsetSubject(String subject){
this.subject=subject;
}
publicString getContent(){
returncontent;
}
publicvoidsetContent(String content){
this.content=content;
}
publicString getFilename(){
returnfilename;
}
publicvoidsetFilename(String filename){
this.filename=filename;
}
publicVectorgetFile(){
returnfile;
}
publicvoidattachFile(String fileName){
if(file==null)
file=newVector();
file.addElement(fileName);
}
}
SendMail.java
packagetest3;

importjava.util.Date;
importjava.util.Enumeration;
importjava.util.Properties;
importjava.util.Vector;

importjavax.activation.DataHandler;
importjavax.activation.FileDataSource;
importjavax.mail.Authenticator;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.Multipart;
importjavax.mail.PasswordAuthentication;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
importjavax.mail.internet.MimeUtility;

publicclassSendMail{

publicString toChinese(String text){
try{
text=MimeUtility.encodeText(newString(text.getBytes(),"GB2312"),"GB2312","B");
}catch(Exception e){
e.printStackTrace();
}
returntext;
}

publicbooleansendMail(MailBean mb){
String host=mb.getHost();
finalString username=mb.getUsername();
finalString password=mb.getPassword();
String from=mb.getFrom();
String to=mb.getTo();
String subject=mb.getSubject();
String content=mb.getContent();
String fileName=mb.getFilename();
Vectorfile=mb.getFile();
Properties props=System.getProperties();
props.put("mail.smtp.host", host);//设置SMTP的主机
props.put("mail.smtp.auth","true");//需要经过验证
Session session=Session.getInstance(props,newAuthenticator(){
publicPasswordAuthentication getPasswordAuthentication(){
returnnewPasswordAuthentication(username, password);
}
});

try{
MimeMessage msg=newMimeMessage(session);
msg.setFrom(newInternetAddress(from));
InternetAddress[] address={newInternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(toChinese(subject));

Multipart mp=newMimeMultipart();
MimeBodyPart mbpContent=newMimeBodyPart();
mbpContent.setText(content);
mp.addBodyPart(mbpContent);

/*往邮件中添加附件*/
Enumerationefile=file.elements();
while(efile.hasMoreElements()){
MimeBodyPart mbpFile=newMimeBodyPart();
fileName=efile.nextElement().toString();
FileDataSource fds=newFileDataSource(fileName);
mbpFile.setDataHandler(newDataHandler(fds));
mbpFile.setFileName(toChinese(fds.getName()));
mp.addBodyPart(mbpFile);
}
msg.setContent(mp);
msg.setSentDate(newDate());
Transport.send(msg);
}catch(MessagingException me){
me.printStackTrace();
returnfalse;
}
returntrue;
}
}

TestJavaMail.java
packagetest3;

publicclassTestJavaMail{

publicstaticvoidmain(String[] args){
MailBean mb=newMailBean();
mb.setHost("smtp.163.com");//设置SMTP主机(163),若用126,则设为:smtp.126.com
mb.setUsername("linyiteng1220");//设置发件人邮箱的用户名
mb.setPassword("******");//设置发件人邮箱的密码,需将*号改成正确的密码
mb.setFrom("linyiteng1220@163.com");//设置发件人的邮箱
mb.setTo("linyiteng1220@126.com");//设置收件人的邮箱
mb.setSubject("测试_JavaMail");//设置邮件的主题
mb.setContent("本邮件中包含三个附件,请检查!");//设置邮件的正文
mb.attachFile("E:\工作报告(林乙腾).doc");//往邮件中添加附件
mb.attachFile("E:\test.txt");
mb.attachFile("E:\test.xls");
SendMail sm=newSendMail();
System.out.println("正在发送邮件...");
if(sm.sendMail(mb))//发送邮件
System.out.println("发送成功!");
else
System.out.println("发送失败!");
}
}
如果你用myEclipse进行开发的话,运行时可能会出现以下的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
解决方法:移除myEclipse自带的EE包
。
但你可能还需要用到EE包里的servlet相关类,那可以从Tomcat的lib文件夹中复制servlet-api.jar到project中,用它来代替EE包,一切OK!
另外,个人测试时发现无法通过新注册的网易邮箱来发邮件,以前旧的就没有问题,不知道是什么原因。
如果要通过gmail发邮件的话,请在代码Properties props = System.getProperties();后再添加以下两行代码:
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.starttls.enable","true");

1963

被折叠的 条评论
为什么被折叠?



