java利用MailService接口发送邮件

本文介绍了在Java项目中使用snaker流程引擎进行邮件通知的实现过程。通过配置message.properties文件设置发送者信息,利用MailService接口和MailServiceImpl接口进行邮件发送。在遇到SMTPSendFailedException错误时,可以通过在接口中给自己抄送邮件来解决该问题。具体调用示例位于ApplyPackageController.java控制器中。
摘要由CSDN通过智能技术生成


公司项目使用到snaker流程引擎,要使用发送邮件功能,即在审批提交的时候通知下一步的处理人处理审批。主要涉及到MailService接口,mailServiceImpl接口,*.properties文件中配置发送者信息以及在具体地方调用接口。

1、我在message.properties中配置:

send_mail_adress=smtp.163.com
send_mail_userName=1825607****@163.com
send_mail_passwd=*****



2、MailService.java接口代码如下:

package com.wonders.bigdata.manageplatform.service.common.service;

import java.util.Map;

public interface MailService {
    /**
     * 发送邮件
     * @return
     */
    public void sendEmailData(String receiver,String subject,Map<String,String> content);
      /**
     * 发送邮件
     * @param receiver 邮件接受者
     * @param subject 邮件主题
     * @param content 邮件内容
     */
}



3、MailServiceImpl.java接口的代码如下:(也可以看详细的对于方法参数的讲解http://blog.163.com/java_star/blog/static/11771480520136511023957/(转侵删))

package com.wonders.bigdata.manageplatform.service.common.service.Impl;

import com.wonders.bigdata.manageplatform.service.common.service.MailService;
import com.wonders.bigdata.manageplatform.utils.Messages;
import org.springframework.stereotype.Service;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Map;
import java.util.Properties;

/**
 * Created by Administrator on 2016/3/23.
 */
@Service("MailServiceImpl")
public class MailServiceImpl implements MailService{

    private static String send_mail_adress = Messages.getString("send_mail_adress");

    private static String send_mail_userName = Messages.getString("send_mail_userName");

    private static String send_mail_passwd = Messages.getString("send_mail_passwd");

    private static Thread thread;
    @Override
    public void sendEmailData(final String receiver, final String subject, final Map<String, Object> content) {
        final Properties props = new Properties();

        thread = new Thread(new Runnable() {
            @Override
            public void run() {
                //表示SMTP发送邮件,需要进行身份验证
                props.put("mail.smtp.auth","true");
                props.put("mail.smtp.host",send_mail_adress);
                //发件人帐号
                props.put("mail.user",send_mail_userName);
                props.put("mail.password",send_mail_passwd);

                //构建授权信息,用于进行SMTP身份验证
                Authenticator authenticator = new Authenticator(){
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication(){
                        String userName = props.getProperty("mail.user");
                        String password = props.getProperty("mail.password");
                        return new PasswordAuthentication(userName,password);
                    }
                };

                //使用环境属性和授权信息,创建邮件会话
                Session mailSession = Session.getInstance(props,authenticator);
                //创建邮件消息
                MimeMessage message = new MimeMessage(mailSession);
                //设置发件人
                InternetAddress form = null;
                try {
                    form = new InternetAddress(props.getProperty("mail.user"));
                    message.setFrom(form);

                    //设置收件人
                    InternetAddress to = new InternetAddress(receiver);//receiver为收件人邮箱!
                    message.setRecipient(Message.RecipientType.TO,to);
                      

                    //设置邮件标题
                    message.setSubject("【大数据管理平台】"+subject);


                    //设置邮件的内容体
                    String cd = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>"
                            + "<html xmlns='http://www.w3.org/1999/xhtml'>"
                            + "<head>"
                            + "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"
                            + "<title>无标题文档</title>"
                            + "</head>"
                            + "<body>"
   //                         + "<p>【大数据管理平台】</p>"
                            + "<p>尊敬的"+content.get("userName")+",您好:</p>"
                            + "<p>您有一条来自"+"【大数据管理平台】"+"的"+"【"+subject+"】"+"待处理事件,请及时处理!</p>"
   //                         + "<p>您有一条来自"+"["+content.get("applyOwner")+"]"+"的"+"["+subject+"]"+"申请,请及时处理!</p>"
                            + "<p>【大数据管理平台】网址:https://data.wondersgroup.com</p>"
                            + "<div align='center'>"
                                                  
                            + "<p align='center'> </p>"
                            + "<div data-spm='100' class='copyright-100 ' margin-up='300px'>"
                            + "<div class='y-row copyright' data-spm='25'>"
                            + "<h4 align='center' class='big'>"
                            + "<a target='blank' href='http://www.wondersgroup.com/about-wd/201412310639133820.html'>关于我们</a>  "
                            + "<a target='blank' href='http://www.wondersgroup.com/news'>服务公告</a>  "
                            + "<a target='blank' href='http://www.wondersgroup.com/contact'>联系我们</a>  "
                            + "</h4><h5> &copy; 1995 - 2015 WONDERS INFORMATION CO., LTD. ALL RIGHTS RESERVED. **信息股份有限公司版权所有 沪ICP备05002296号 </h5></div></div></body></html>";


                    message.setContent(cd,"text/html;charset=UTF-8");

                    //发送邮件
                    Transport.send(message);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        thread.start();
    }
}


备注:如出现com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 126 smtp6,j9KowAAnRcUi.......这样的bug。 在MailService接口中将邮件给自己抄送一份就行了不懂的见http://blog.163.com/java_star/blog/static/11771480520136511023957/


4.1 项目ApplyPackageController.java中具体调用的地方:

 //发送短信、邮件
            String nextOperator_message = params.get("S-ACTOR").toString();//本项目中获取下一步处理人
            String applyName_message = params.get("packName").toString();//本项目中获取申请名称
            String decision_message = params.get("decision").toString();//这也是本项目独有的

            if (StringUtils.isNotEmpty(nextOperator_message) && StringUtils.isNotEmpty(applyName_message)) {
                UserPO userPO = accountService.findUserByLoginName(nextOperator_message);
                if (userPO != null) {
                    String reciver = userPO.getName();      //获取接收人用户名
                    String reciveNum =  userPO.getMobile(); //获取接收人手机号
                    Map<String,Object> map = new HashMap<>();
                    map.put("userMailAddress",userPO.getEmail());//给map增加的信息,以备使用
                    map.put("userName",userPO.getName());//给map增加的信息,以备使用
                    String receiver = userPO.getEmail();//接受人的邮箱赋值给receiver
                    if (decision_message.equals("1")) {

                    }
                    //以上都是获取需要的相关参数,比如发送邮件方法中的接受邮箱, 申请名,map包含的信息,再调用发送邮件接口,
                    mailService.sendEmailData(receiver, applyName_message,map );
                    //调用发送短信接口,这是项目的另一个功能
                    textAndEmailService.sendMessageInfo(reciver, reciveNum, applyName_message);
                }
            }
4.2 整个ApplyPackageController.java:(可以不看)

package com.wonders.bigdata.manageplatform.web.flow;

import com.wonders.bigdata.manageplatform.engine.EngineFacets;
import com.wonders.bigdata.manageplatform.service.common.service.HiveService;
import com.wonders.bigdata.manageplatform.service.common.service.MailService;//导入
import com.wonders.bigdata.manageplatform.service.common.service.TextAndEmailService;
import com.wonders.bigdata.manageplatform.service.datapackage.model.po.DataPackagePO;
import com.wonders.bigdata.manageplatform.service.datapackage.service.DataPackageService;
import com.wonders.bigdata.manageplatform.service.metadata.model.po.MetadataTablePO;
import com.wonders.bigdata.manageplatform.service.metadata.service.MetadataTableService;
import com.wonders.bigdata.manageplatform.service.processrelate.service.ProcessRelateService;
import com.wonders.bigdata.manageplatform.service.resourcetype.model.po.CatalogTablePO;
import com.wonders.bigdata.manageplatform.service.resourcetype.model.po.StandardCatalogPO;
import com.wonders.bigdata.manageplatform.service.resourcetype.service.CatalogTableService;
import com.wonders.bigdata.manageplatform.service.resourcetype.service.StandardCatalogService;
import com.wonders.bigdata.manageplatform.service.sysauthoritymanage.model.po.UserUsergroupPO;
import com.wonders.bigdata.manageplatform.service.sysauthoritymanage.model.po.UsergroupPO;
import com.wonders.bigdata.manageplatform.service.sysauthoritymanage.service.UserUsergroupService;
import com.wonders.bigdata.manageplatform.service.sysauthoritymanage.service.UsergroupService;
import com.wonders.bigdata.manageplatform.service.user.dao.UserDao;
import com.wonders.bigdata.manageplatform.service.user.model.po.UserDataPackagePO;
import com.wonders.bigdata.manageplatform.service.user.model.po.UserPO;
import com.wonders.bigdata.manageplatform.service.user.service.Impl.ShiroDbRealm.ShiroUser;
import com.wonders.bigdata.manageplatform.service.user.service.AccountService;
import com.wonders.bigdata.manageplatform.service.user.service.UserDataPackageService;
import com.wonders.bigdata.manageplatform.service.user.service.UserGradeService;
import com.wonders.bigdata.manageplatform.utils.Constant;
import com.wonders.bigdata.manageplatform.utils.LogsSave;
import com.wonders.bigdata.manageplatform.utils.Messages;
import com.wonders.bud.framework.common.util.RestMsg;
import com.wonders.engine.SnakerEngine;
import com.wonders.engine.access.QueryFilter;
import com.wonders.engine.entity.HistoryOrder;
import com.wonders.engine.entity.HistoryTask;
import com.wonders.engine.entity.Order;
import com.wonders.engine.entity.Task;
import com.wonders.engine.helper.JsonHelper;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.hibernate.internal.util.ConfigHelper;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;

@Controller
@RequestMapping("api/flow/applyPacakgeprocess")
public class ApplyPackageController {
    protected Logger log = Logger.getLogger(ApplyPackageController.class);
    private Log logProgress = LogFactory.getLog("Administrator_Process");

    private Log logger = LogFactory.getLog("Tenant_Application"); //数据申请日志	输出日志格式:数据申请+”  ”+用户名+”  ”+ip地址+”  ”+日期+”  ”+申请名称+”  ”+表名(多表用逗号隔开)+”  ”+所属数据目录+Description;
	
    @Autowired
    private EngineFacets facets;

    @Autowired
    private UserDataPackageService userDataPackageService;

    @Autowired
    private DataPackageService dataPackageService;

    @Autowired
    private HiveService hiveService;

    @Autowired
    private MetadataTableService metadataTableService;

    @Autowired
    private CatalogTableService catalogTableService;

    @Autowired
    private UserDao userDao;

    @Autowired
    private StandardCatalogService standardCatalogService;

    @Autowired
    private AccountService accountService;

    @Resource
    private UserUsergroupService userUsergroupService;

    @Resource
    private UsergroupService usergroupService;

    @Resource
    private TextAndEmailService textAndEmailService;

    @Resource
    private MailService mailService;//导入

    /**
     * 用户暂存申请信息
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "/tempStore", method = RequestMethod.POST)
    @ResponseBody
    public RestMsg<String> tempStore(HttpServletRequest request) {
        RestMsg<String> rm = new RestMsg<String>();
        Map<String, Object> params = GetParametersCommon(request);

        //数据申请日志
        LogsSave.Tenant_Application(logger,this.getUname(),request.getRemoteAddr(),params.get("packName").toString(),params.get("selectedTablesName").toString(),params.get("selectedSourcesName").toString()," 用户暂存申请信息");

        //根据流程类型获取流程id
        CommonProcess commonProcess = new CommonProcess(facets);
        String processId = commonProcess.getProcessIdByType(Constant.PROCESS_TYPE_USERAPPLY);
        String orderId = request.getParameter("orderId");
        String taskId = request.getParameter("taskId");
        String username = getUname();
        if (StringUtils.isEmpty(orderId) && StringUtils.isEmpty(taskId)) {
            facets.startAndTempStore(processId, username, params);
        } else {
            String methodStr = request.getParameter("method");
            int method = 0;
            if (StringUtils.isNotEmpty(methodStr)) {
                method = Integer.parseInt(methodStr);
            }
            switch (method) {
                case 0://任务执行
                    Task task = facets.getEngine().query().getTask(taskId);
                    task.setVariable(JsonHelper.toJson(params));
                    facets.getEngine().task().updateTask(task);
                    break;
                case -1://驳回、任意跳转
                    facets.executeAndJump(taskId, username, params, request.getParameter("nodeName"));
                    break;
                default:
                    facets.execute(taskId, username, params);
                    break;
            }
        }
        rm.successMsg();
        return rm;
    }

    /**
     * 管理员暂存申请包的生成
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "/adminTempStoreApply", method = RequestMethod.POST)
    @ResponseBody
    public RestMsg<String> adminTempStoreApply(HttpServletRequest request) {
        RestMsg<String> rm = new RestMsg<String>();
        Map<String, Object> params = new HashMap<String, Object>();
        Enumeration<String> paraNames = request.getParameterNames();
        while (paraNames.hasMoreElements()) {
            String element = paraNames.ne
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值