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("[email protected]");

18         mailInfo.setPassword("test");

19         mailInfo.setFromAddress("[email protected]");

20         mailInfo.setToAddress("[email protected]");

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("[email protected]");这两句话。即如果你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,如果不的话,是不会发送成功的。
5、关于javamail验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。

你可能感兴趣的:(javamail)