Java 项目中常常回遇到发送邮件

Java 发送邮件有几种,今天先给大家介绍用 HtmlEmail 来发送邮件,我这里是用 Maven 来搭建的

HtmlEmail 可以抄带HTML

 

首先 需要导入jar 包

1 <dependency>
2     <groupId>org.apache.commons</groupId>
3     <artifactId>commons-email</artifactId>
4     <version>1.4</version>
5 </dependency>

 

然后我们来建立一个发送邮件的 Mail 类 JavaBean

1 public class Mail implements Serializable{
  2 
  3     private static final long serialVersionUID = -6390720891150157552L;
  4     public static final String ENCODEING = "UTF-8"; 
  5 
  6     // 服务器地址  
  7     private String host;
  8     // 发件人的邮箱  
  9     private String sender; 
 10     // 发件人昵称  
 11     private String name; 
 12     // 账号  
 13     private String username; 
 14     // 密码  
 15     private String password; 
 16     // 收件人的邮箱  
 17     private String receiver;
 18     // 收件人的名称
 19     private String receiverName;
 20     // 收件人的邮箱(key)和名称(value)
 21     private Map<String, String> to;
 22     // 抄送人的邮箱(key)和名称(value)
 23     private Map<String, String> cc;
 24     // 秘密抄送人的邮箱(key)和名称(value)
 25     private Map<String, String> bcc;
 26     // 主题  
 27     private String subject; 
 28     // 信息(支持HTML)
 29     private String message;
 30 
 31     public String getHost() {
 32         return host;
 33     }
 34     public void setHost(String host) {
 35         this.host = host;
 36     }
 37     public String getSender() {
 38         return sender;
 39     }
 40     public void setSender(String sender) {
 41         this.sender = sender;
 42     }
 43     public String getReceiver() {
 44         return receiver;
 45     }
 46     public void setReceiver(String receiver) {
 47         this.receiver = receiver;
 48     }
 49     public String getName() {
 50         return name;
 51     }
 52     public void setName(String name) {
 53         this.name = name;
 54     }
 55     public String getUsername() {
 56         return username;
 57     }
 58     public void setUsername(String username) {
 59         this.username = username;
 60     }
 61     public String getPassword() {
 62         return password;
 63     }
 64     public void setPassword(String password) {
 65         this.password = password;
 66     }
 67     public String getSubject() {
 68         return subject;
 69     }
 70     public void setSubject(String subject) {
 71         this.subject = subject;
 72     }
 73     public String getMessage() {
 74         return message;
 75     }
 76     public void setMessage(String message) {
 77         this.message = message;
 78     }
 79     public String getReceiverName() {
 80         return receiverName;
 81     }
 82     public void setReceiverName(String receiverName) {
 83         this.receiverName = receiverName;
 84     }
 85     public Map<String, String> getTo() {
 86         return to;
 87     }
 88     public void setTo(Map<String, String> to) {
 89         this.to = to;
 90     }
 91     public Map<String, String> getCc() {
 92         return cc;
 93     }
 94     public void setCc(Map<String, String> cc) {
 95         this.cc = cc;
 96     }
 97     public Map<String, String> getBcc() {
 98         return bcc;
 99     }
100     public void setBcc(Map<String, String> bcc) {
101         this.bcc = bcc;
102     }
103 }

 

然后再来创建一个发送邮件的工具类 MailUtil

1 public class MailUtil {
  2 
  3     public Boolean send(Mail mail){
  4         HtmlEmail email = new HtmlEmail();
  5         try {
  6             // 这里是SMTP发送服务器的名字:163的如下:"smtp.163.com"  
  7             email.setHostName(mail.getHost());
  8             // 字符编码集的设置  
  9             email.setCharset(Mail.ENCODEING);
 10             // 发送人的邮箱  
 11             email.setFrom(mail.getSender(), mail.getName());  
 12             // 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码  
 13             email.setAuthentication(mail.getUsername(), mail.getPassword());
 14 
 15             // 设置收件人信息
 16             setTo(email, mail);
 17             // 设置抄送人信息
 18             setCc(email, mail);
 19             // 设置密送人信息
 20             setBcc(email, mail);
 21             // 要发送的邮件主题  
 22             email.setSubject(mail.getSubject());
 23             // 要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签  
 24             email.setHtmlMsg(mail.getMessage());
 25             // 发送  
 26             email.send();
 27             if (Log.isDebugEnabled()) {
 28                 Log.info(mail.getSender() + " 发送邮件到 " + mail.getReceiver());
 29             }
 30             return true;
 31         } catch (Exception e) {
 32             e.printStackTrace();
 33             Log.info(mail.getSender() + " 发送邮件到 " + mail.getReceiver() + " 失败");
 34             return false;
 35         }
 36     }
 37 
 38     /**
 39      * 设置收件人信息
 40      * 
 41      * @param email 
 42      * @param mail
 43      * @throws EmailException
 44      */
 45     private void setTo(HtmlEmail email, Mail mail) throws EmailException{
 46         // 收件人不为空
 47         if (StringUtils.isNotEmpty(mail.getReceiver())) {
 48             // 收件人名称不为空
 49             if (StringUtils.isNotEmpty(mail.getReceiverName())) {
 50                 email.addTo(mail.getReceiver(), mail.getReceiverName());
 51             } else {
 52                 email.addTo(mail.getReceiver());
 53             }
 54         }
 55         // 收件人 Map 不为空
 56         if (mail.getTo() != null) {
 57             for (Map.Entry<String, String> entry : mail.getTo().entrySet()) {
 58                 // 收件人名称不为空
 59                 if (StringUtils.isNotEmpty(entry.getValue())) {
 60                     email.addTo(entry.getKey(), entry.getValue());
 61                 } else {
 62                     email.addTo(entry.getKey());
 63                 }
 64             }
 65         }
 66     }
 67 
 68     /**
 69      * 设置抄送人信息
 70      * 
 71      * @param email 
 72      * @param mail
 73      * @throws EmailException
 74      */
 75     private void setCc(HtmlEmail email, Mail mail) throws EmailException{
 76         // 抄送人 Map 不为空
 77         if (mail.getCc() != null) {
 78             for (Map.Entry<String, String> entry : mail.getCc().entrySet()) {
 79                 // 抄送人名称不为空
 80                 if (StringUtils.isNotEmpty(entry.getValue())) {
 81                     email.addCc(entry.getKey(), entry.getValue());
 82                 } else {
 83                     email.addCc(entry.getKey());
 84                 }
 85             }
 86         }
 87     }
 88 
 89     /**
 90      * 设置密送人信息
 91      * 
 92      * @param email 
 93      * @param mail
 94      * @throws EmailException
 95      */
 96     private void setBcc(HtmlEmail email, Mail mail) throws EmailException{
 97         // 密送人 Map 不为空
 98         if (mail.getBcc() != null) {
 99             for (Map.Entry<String, String> entry : mail.getBcc().entrySet()) {
100                 // 密送人名称不为空
101                 if (StringUtils.isNotEmpty(entry.getValue())) {
102                     email.addBcc(entry.getKey(), entry.getValue());
103                 } else {
104                     email.addBcc(entry.getKey());
105                 }
106             }
107         }
108     }
109 }

 

写到这里,大概也就差不多了,万里长征只有最后一步了

测试,测试,测试

 

这里编写一个 junit 方法来测试

1     @Test
 2     public void sendMail(){
 3         Mail mail = new Mail();
 4         // 设置邮件服务器 
 5         mail.setHost("smtp.exmail.qq.com");
 6         // 发件人邮件地址
 7         mail.setSender("chenhao@kezhanbang.cn");
 8         // 发件人名称
 9         mail.setName("Java.小学生");
10         // 登录账号,一般都是和邮箱名一样吧  
11         mail.setUsername("chenhao@kezhanbang.cn");
12         // 发件人邮箱的登录密码  
13         mail.setPassword("xxxxxxxx");
14         // 接收人  
15         mail.setReceiver("huntertochen@163.com");
16         mail.setReceiverName("我要女票");
17         mail.setSubject("万里长征最后一步测试");
18         String html = "<!DOCTYPE html>";
19         html += "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";
20         html += "<title>Insert title here</title>";
21         html += "</head><body>";
22         html += "<div style=\"width:600px;height:400px;margin:50px auto;\">";
23         html += "<h1>我来看看邮件是否发送成功呢</h1><br/><br/>";
24         html += "<p>下面是通过该协议可以创建一个指向电子邮件地址的超级链接,通过该链接可以在Internet中发送电子邮件</p><br/>";
25         html += "<a href=\"mailto:huntereagle@foxmail.com?subject=test&cc=huntertochen@163.com&body=use mailto sample\">send mail</a>";
26         html += "</div>";
27         html += "</body></html>";
28         mail.setMessage(html);
29         
30         new MailUtil().send(mail);
31     }

 

赶紧登录邮箱看看吧

java 发送邮件换行和空格 java发送html邮件_java

来看看这里 主题 内容,发送人名称和收件人名称是否和代码写的一样呢,如果一样的话,恭喜你成功啦

到这,其实发送邮件就算完了!!!

 

这里在啰嗦最后一个小知识点 mailto

mailto: 通过该协议可以创建一个指向电子邮件地址的超级链接,通过该链接可以在Internet中发送电子邮件

我们点击 send mail 会打开你邮件客户端一个发送界面,如果你有写抄带信息,也会给你带上

java 发送邮件换行和空格 java发送html邮件_HtmlEmail_02