javamail发送邮件的简单实例(转)
今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题。为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用。呵呵
注意:要先导入javamail的mail.jar包。
以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。
第一个类:MailSenderInfo.java
1 package com.util.mail; 2 3 import java.util.Properties; 4 5 /** 6 * 发送邮件需要使用的基本信息 7 */ 8 public class MailSenderInfo { 9 10 //发送邮件的服务器的IP和端口 11 private String mailServerHost; 12 private String mailServerPort = "25"; 13 14 //邮件发送者的地址 15 private String fromAddress; 16 //邮件接收者的地址 17 private String toAddress; 18 //登录邮件发送服务器的用户名和密码 19 private String userName; 20 private String password; 21 22 //是否需要身份验证 23 private boolean validate = false; 24 25 //邮件主题 26 private String subject; 27 //邮件的文本内容 28 private String content; 29 //邮件附件的文件名 30 private String[] attachFileNames; 31 32 /** 33 * 获得邮件会话属性 34 */ 35 public Properties getProperties() { 36 Properties p = new Properties(); 37 p.put("mail.smtp.host", this.mailServerHost); 38 p.put("mail.smtp.port", this.mailServerHost); 39 p.put("mail.smtp.auth", validate ? "true" : "false"); 40 return p; 41 } 42 43 public String getMailServerHost() { 44 return mailServerHost; 45 } 46 47 public void setMailServerHost(String mailServerHost) { 48 this.mailServerHost = mailServerHost; 49 } 50 51 public String getMailServerPort() { 52 return mailServerPort; 53 } 54 55 public void setMailServerPort(String mailServerPort) { 56 this.mailServerPort = mailServerPort; 57 } 58 59 public boolean isValidate() { 60 return validate; 61 } 62 63 public void setValidate(boolean validate) { 64 this.validate = validate; 65 } 66 67 public String[] getAttachFileNames() { 68 return attachFileNames; 69 } 70 71 public void setAttachFileNames(String[] attachFileNames) { 72 this.attachFileNames = attachFileNames; 73 } 74 75 public String getFromAddress() { 76 return fromAddress; 77 } 78 79 public void setFromAddress(String fromAddress) { 80 this.fromAddress = fromAddress; 81 } 82 83 public String getPassword() { 84 return password; 85 } 86 87 public void setPassword(String password) { 88 this.password = password; 89 } 90 91 public String getToAddress() { 92 return toAddress; 93 } 94 95 public void setToAddress(String toAddress) { 96 this.toAddress = toAddress; 97 } 98 99 public String getUserName() { 100 return userName; 101 } 102 103 public void setUserName(String userName) { 104 this.userName = userName; 105 } 106 107 public String getSubject() { 108 return subject; 109 } 110 111 public void setSubject(String subject) { 112 this.subject = subject; 113 } 114 115 public String getContent() { 116 return content; 117 } 118 119 public void setContent(String content) { 120 this.content = content; 121 } 122 123 }
第二个类:SimpleMailSender.java
1 package com.util.mail; 2 3 import java.util.Date; 4 import java.util.Properties; 5 6 import javax.mail.Address; 7 import javax.mail.BodyPart; 8 import javax.mail.Message; 9 import javax.mail.MessagingException; 10 import javax.mail.Multipart; 11 import javax.mail.Session; 12 import javax.mail.Transport; 13 import javax.mail.internet.AddressException; 14 import javax.mail.internet.InternetAddress; 15 import javax.mail.internet.MimeBodyPart; 16 import javax.mail.internet.MimeMessage; 17 import javax.mail.internet.MimeMultipart; 18 19 /** 20 * 简单邮件(不带附件)发送器 21 */ 22 public class SimpleMailSender { 23 24 /** 25 * 以文本格式发送邮件 26 * @param mailInfo 待发送的邮件的信息 27 */ 28 public boolean sendTextMail(MailSenderInfo mailInfo) { 29 //判断是否需要身份认证 30 MyAuthenticator authenticator = null; 31 Properties pro = mailInfo.getProperties(); 32 33 if (mailInfo.isValidate()) { 34 //如果需要身份认证,则创建一个密码验证器 35 authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); 36 } 37 38 //根据邮件会话属性和密码验证器构造一个发送邮件的session 39 Session sendMailSession = Session.getDefaultInstance(pro, authenticator); 40 41 try { 42 //根据session创建一个邮件消息 43 Message mailMessage = new MimeMessage(sendMailSession); 44 //创建邮件发送者地址 45 Address from = new InternetAddress(mailInfo.getFromAddress()); 46 //设置邮件消息的发送者 47 mailMessage.setFrom(from); 48 //创建邮件的接收者地址,并设置到邮件消息中 49 Address to = new InternetAddress(mailInfo.getToAddress()); 50 // Message.RecipientType.TO属性表示接收者的类型为TO 51 mailMessage.setRecipient(Message.RecipientType.TO, to); 52 // 设置邮件消息的主题 53 mailMessage.setSubject(mailInfo.getSubject()); 54 // 设置邮件消息发送的时间 55 mailMessage.setSentDate(new Date()); 56 // 设置邮件消息的主要内容 57 String mailContent = mailInfo.getContent(); 58 mailMessage.setText(mailContent); 59 // 发送邮件 60 Transport.send(mailMessage); 61 return true; 62 } catch (AddressException e) { 63 e.printStackTrace(); 64 } catch (MessagingException e) { 65 e.printStackTrace(); 66 } 67 return false; 68 } 69 70 /** 71 * 以Html格式发送邮件 72 * @param mailInfo 待发送的邮件的信息 73 */ 74 public boolean sendHtmlMail(MailSenderInfo mailInfo) { 75 //判断是否需要身份认证 76 MyAuthenticator authenticator = null; 77 Properties pro = mailInfo.getProperties(); 78 79 if (mailInfo.isValidate()) { 80 //如果需要身份认证,则创建一个密码验证器 81 authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); 82 } 83 //根据邮件会话属性和密码验证器构造一个发送邮件的session 84 Session sendMailSession = Session.getDefaultInstance(pro, authenticator); 85 86 try { 87 //根据session创建一个邮件消息 88 Message mailMessage = new MimeMessage(sendMailSession); 89 //创建邮件发送者地址 90 Address from = new InternetAddress(mailInfo.getFromAddress()); 91 //设置邮件消息的发送者 92 mailMessage.setFrom(from); 93 //创建邮件的接收者地址,并设置到邮件消息中 94 Address to = new InternetAddress(mailInfo.getToAddress()); 95 // Message.RecipientType.TO属性表示接收者的类型为TO 96 mailMessage.setRecipient(Message.RecipientType.TO, to); 97 // 设置邮件消息的主题 98 mailMessage.setSubject(mailInfo.getSubject()); 99 // 设置邮件消息发送的时间 100 mailMessage.setSentDate(new Date()); 101 // MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象 102 Multipart mainPart = new MimeMultipart(); 103 // 创建一个包含HTML内容的MimeBodyPart 104 BodyPart html = new MimeBodyPart(); 105 //设置HTML内容 106 html.setContent(mailInfo.getContent(), "text/html; charset=utf-8"); 107 mainPart.addBodyPart(html); 108 //将mainPart对象设置为邮件内容 109 mailMessage.setContent(mainPart); 110 // 发送邮件 111 Transport.send(mailMessage); 112 return true; 113 } catch (AddressException e) { 114 e.printStackTrace(); 115 } catch (MessagingException e) { 116 e.printStackTrace(); 117 } 118 return false; 119 } 120 121 }
第三个类:MyAuthenticator.java
1 package com.util.mail; 2 3 import javax.mail.*; 4 5 /** 6 * 身份认证 7 */ 8 public class MyAuthenticator extends Authenticator { 9 10 String userName = null; 11 String password = null; 12 13 public MyAuthenticator(){ 14 15 } 16 17 public MyAuthenticator(String username, String password) { 18 this.userName = username; 19 this.password = password; 20 } 21 22 @Override 23 protected PasswordAuthentication getPasswordAuthentication() { 24 return new PasswordAuthentication(userName, password); 25 } 26 27 }
下面给出使用上面三个类的代码:
1 package com.util.mail; 2 3 /** 4 * 发送邮件 5 */ 6 public class Mail { 7 8 /** 9 * @param args 10 */ 11 public static void main(String[] args) { 12 //这个类主要是设置邮件 13 MailSenderInfo mailInfo = new MailSenderInfo(); 14 mailInfo.setMailServerHost("smtp.126.com"); 15 mailInfo.setMailServerPort("25"); 16 mailInfo.setValidate(true); 17 mailInfo.setUserName("test@126.com"); 18 mailInfo.setPassword("test"); 19 mailInfo.setFromAddress("test@126.com"); 20 mailInfo.setToAddress("test@qq.com"); 21 mailInfo.setSubject("设置邮箱标题 如http://www.guihua.org 中国桂花网"); 22 mailInfo.setContent("设置邮箱内容 如http://www.guihua.org 中国桂花网 是中国最大桂花网站=="); 23 //这个类主要来发送邮件 24 SimpleMailSender sms = new SimpleMailSender(); 25 sms.sendTextMail(mailInfo); 26 sms.sendHtmlMail(mailInfo); 27 } 28 29 }
最后,给出朋友们几个注意的地方:
1、使用此代码你可以完成你的javamail的邮件发送功能。三个类缺一不可。
2、这三个类我打包是用的com.util.mail包,如果不喜欢,你可以自己改,但三个类文件必须在同一个包中
3、不要使用你刚刚注册过的邮箱在程序中发邮件,如果你的163邮箱是刚注册不久,那你就不要使用“smtp.163.com”。因为你发不出去。刚注册的邮箱是不会给你这种权限的,也就是你不能通过验证。要使用你经常用的邮箱,而且时间比较长的。
4、另一个问题就是mailInfo.setMailServerHost("smtp.163.com");与mailInfo.setFromAddress("han2000lei@163.com");这两句话。即如果你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,如果不的话,是不会发送成功的。
5、关于javamail验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。