【背景】


    最近做项目的时候,有这样一个需求,因为项目中的流程是分级流转审批的过程,所以当前人操作完成之后,需要程序的一个固定邮箱通过邮件通知下级相应人员进行处理,所以也就有了小编今天的这篇博文。


【操作步骤】


    1.引入activation.jar、commons-email-1.1.jar、mail.jar这三个jar包,百度搜索下载或者单击此百度网盘链接(​​请单击此链接下载​​)

    2.将共用的信息放到配置文件中(这里只附上一个图片,因为代码会将中文内容转换为其它格式)

      注:下面的message1-7全部为邮件内容部分,这里为了实现定制化将公共内容放到一个地方存放,才将其拆开;下面的host内容请按照你邮箱的地址查询相关的host



java邮件提醒实现_邮件



    3.建立mail实体类,并通过静态方法读取配置文件中的信息


-
package com.gxt.common.vo;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
* mail实体
* @author mk
*
*/
public class Mail {

public static final String ENCODEING = "UTF-8";

private static String host; //服务器地址
private static String sender; //发件人的邮箱
private String receiver;//收件人的邮箱
private static String name; //发件人昵称
private static String username;//账号
private static String password;//密码
private static String subject; //主题
private String message; //详情
private static String message1; //详情1
private static String message3; //详情3
private static String message5; //详情5
private static String message7; //详情7


//将下面内容放到配置文件mail.properties中,方便修改
static{
InputStream in = Mail.class.getResourceAsStream("/mail.properties");

Properties p = new Properties();

try {
p.load(in);
host =p.getProperty("Host");
sender =p.getProperty("sender");
name =p.getProperty("name");
username =p.getProperty("username");
password =p.getProperty("password");
subject =p.getProperty("subject");
message1 =p.getProperty("message1");
message3 =p.getProperty("message3");
message5 =p.getProperty("message5");
message7 =p.getProperty("message7");
} catch (IOException e) {
e.printStackTrace();
}
}

public static String getHost() {
return host;
}

public static void setHost(String host) {
Mail.host = host;
}

public static String getSender() {
return sender;
}

public static void setSender(String sender) {
Mail.sender = sender;
}

public String getReceiver() {
return receiver;
}

public void setReceiver(String receiver) {
this.receiver = receiver;
}

public static String getName() {
return name;
}

public static void setName(String name) {
Mail.name = name;
}

public static String getUsername() {
return username;
}

public static void setUsername(String username) {
Mail.username = username;
}

public static String getPassword() {
return password;
}

public static void setPassword(String password) {
Mail.password = password;
}

public static String getSubject() {
return subject;
}

public static void setSubject(String subject) {
Mail.subject = subject;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public static String getMessage1() {
return message1;
}

public static void setMessage1(String message1) {
Mail.message1 = message1;
}

public static String getMessage3() {
return message3;
}

public static void setMessage3(String message3) {
Mail.message3 = message3;
}

public static String getMessage5() {
return message5;
}

public static void setMessage5(String message5) {
Mail.message5 = message5;
}

public static String getMessage7() {
return message7;
}

public static void setMessage7(String message7) {
Mail.message7 = message7;
}

}
-


    4.建立工具类,调用jar包中的内容实现邮件发送


-
package com.gxt.common.util;

import java.sql.Date;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

import com.gxt.common.vo.Mail;
import com.miitgxt.common.util.ResultInfo;

/**
* 邮件发送工具类
* @author mk
*
*/
public class MailUtil {

//发送调用的方法
public ResultInfo send(Mail mail){
//定制化返回的内容
ResultInfo result = new ResultInfo(false,"邮件发送失败请与管理员联系");
//发送email
HtmlEmail email = new HtmlEmail();
try{
//System.out.println(mail.getHost()+"---"+mail.getSender()+"---"+mail.getName()+"---"+mail.getUsername()+"---"+mail.getPassword()+"---"+mail.getSubject());
//这里是SMTP发送服务器的名字:163的如下:“smtp.163.com”
email.setHostName(mail.getHost());
//字符编码集的设置
email.setCharset(Mail.ENCODEING);
//收件人的邮箱
email.addTo(mail.getReceiver());
//发送人的邮箱
email.setFrom(mail.getSender(),mail.getName());
//如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码
email.setAuthentication(mail.getUsername(), mail.getPassword());
//要发送的邮件主题
email.setSubject(mail.getSubject());
//要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签
email.setMsg(mail.getMessage());
//发送
email.send();
result.setStatus(true);
return result;
}catch(EmailException e){
return result;
}
}

//将邮件内容组装的方法
public ResultInfo setMail(String usermail, String message2 ,String message4){
Mail mail = new Mail();
mail.setReceiver(usermail); //接收人
//放入配置文件中的添加部分
StringBuffer message = new StringBuffer();
message.append(mail.getMessage1());
message.append(message2);
message.append(mail.getMessage3());
message.append(message4);
message.append(mail.getMessage5());
Date datatime = new java.sql.Date(new java.util.Date().getTime());
message.append(datatime.toString());
message.append(mail.getMessage7());

mail.setMessage(message.toString());
MailUtil mailUtil = new MailUtil();
ResultInfo isstr = mailUtil.send(mail);

return isstr;

}
}
-


    5.写一个main方法进行测试


-
public static void main(String[] args) throws IOException {
MailUtil mailUtil = new MailUtil();
ResultInfo aaa = mailUtil.setMail("mk740474106@163.com", "收件人姓名XXX", "邮件内容");
if (aaa.isStatus()) {
System.out.println("发送成功");
}else{
System.out.println("发送失败");
}

}
-


    6.效果展示,如下图

java邮件提醒实现_java_02

【思路扩展】

    感兴趣的朋友可以通过反编译工具去看jar中具体实现邮件发送的代码哦O(∩_∩)O~


【总结感受】

    本文借鉴博客:​​请单击链接查看​​     在工作中,遇到相应的需求,然后解决它,这就是江湖,这就是江湖中的经验

    在解决问题的过程中也让自己进行了大量的思考,如何让自己的代码拥有更好的复用性,如何让自己的代码更加简洁,如何让自己的代码更加高效?

    另外小编还会去思考如何让自己做的功能能够更好的服务用户,可能这一点是最重要的吧,所谓得用户者得天下

    收拾行囊,继续闯荡自己的一个人的江湖啦O(∩_∩)O~