工作流二次开发之邮箱提醒

news/2025/2/25 4:02:49

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

为了考虑以后二次开发,和将来的代码增多。调用工作流的接口,大量代码写在自己新建项目中。

工作流接口:

public boolean sendMail(Map lhm){
         //设置HTTP连接的URL地址,就是第二个应用的URL。如果在同一个计算机上可以将192.168.1.134变成127.0.0.1或者localhost  
        
        try {
            String http="http://localhost:8080/SDKFlow/email.action";
            URL url=new URL(http);  
            //生成HttpURLConnection连接  
            HttpURLConnection httpurlconnection=(HttpURLConnection) url.openConnection();  
            //设置有输出流,默认为false,就是不能传递参数。  
            httpurlconnection.setDoOutput(true);  
            //设置发送请求的方式。注意:一定要大写  
            httpurlconnection.setRequestMethod("POST");
            //设置连接超时的时间。不过不设置,在网络异常的情况下,可能会造成程序僵死而无法继续向下执行,所以一般设置一个超时时间。单位为毫秒  
            httpurlconnection.setConnectTimeout(30000);  
            //设置输出流。  
            OutputStreamWriter writer=new OutputStreamWriter(httpurlconnection.getOutputStream(), "utf-8");  
            //传递的参数,中间使用&符号分割。  
            writer.write("authid="+lhm.get("authid")+"&title="+lhm.get("title"));
            //用于刷新缓冲流。因为默认她会写入到内存的缓冲流中,到一定的数据量时,才会写入,使用这个命令可以让他立即写入,不然下面就到关闭流了  
            writer.flush();  
            //用于关闭输出流,关闭之后就不可以输出数据了,所以要使用flush刷新缓冲流  
            writer.close();  
            //获得返回的请求吗。  
            int responseCode=httpurlconnection.getResponseCode();  
            //表示请求成功  
            if(responseCode==HttpURLConnection.HTTP_OK){  
                System.out.println("OK"+responseCode);  
                //获得服务端的输出流。得到返回的数据  
                InputStream urlstream=httpurlconnection.getInputStream();  
                BufferedReader reader=new BufferedReader(new InputStreamReader(urlstream));  
                String line;  
                String tline="";  
                while((line=reader.readLine())!=null){  
                    tline+=line;  
                }  
                //输出所有的数据  
                System.out.println(tline);  
                return true;
            }else{  
                System.out.println("ERR"+responseCode);  
            }  
        } catch (Exception e) {
            // TODO: handle exception
        }
        return false;
    }

自己新建的项目为spring+mybatis构成。

controller类:

@RequestMapping(value="/email")
    public String Email(HttpServletRequest request, HttpServletResponse response)throws Exception{
        logger.info("进入邮件控制层");
        DataSourceContextHolder.setDbType("horizon");
        String authid=request.getParameter("authid");
        String title=request.getParameter("title");
//        String authid="HZ8080815fe7c0a7015febef32b10180";
//        String title="ss";
        String str=  sdkFlowService.GetUserEmailByUserID(authid,title);
        logger.info("返回值为:"+str);
        if(str.trim().equals("ok")){
            return "welcome";
        }else if(str.trim().equals("fail")){
            
            return "";
        }else{
            return "";
        }
        
    
    }

接口实现类:

/**
     * 通过用户信息ID获取用户信息
     * @param str 用户ID
     * @return 用户相关信息——获取email
     * @throws Exception
     */
    @Transactional
    @Override
    public String GetUserEmailByUserID(String id,String title) throws Exception {
        logger.info("进入Email接口");
        DBUserInfo user = new DBUserInfo();
        user.setID(id.trim());
        DBUserInfo userifno=sdkflowMapper.getUserEmail(user);
        if(userifno.getEMAIL()==null ||userifno.getEMAIL().equals("")){//如果邮箱地址为空,则返回字符串“fail”
            return "fail";
        }
        logger.info("获取下节点人信息:"+userifno);
        logger.info("开始发送邮件");
        // 邮箱发送邮件
        Properties prop = new Properties();
        //协议
        prop.setProperty("mail.transport.protocol", "smtp");
        //服务器
        prop.setProperty("mail.smtp.host", "smtp.exmail.qq.com");
        //端口
        prop.setProperty("mail.smtp.port", "465");
        //使用smtp身份验证
        prop.setProperty("mail.smtp.auth", "true");
        //使用SSL,企业邮箱必需!
        //开启安全协议
        MailSSLSocketFactory sf = null;
        try {
            sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
        } catch (GeneralSecurityException e1) {
            e1.printStackTrace();
        }
        prop.put("mail.smtp.ssl.enable", "true");
        prop.put("mail.smtp.ssl.socketFactory", sf);
        //
        //获取Session对象
        Session s = Session.getDefaultInstance(prop,new Authenticator() {
            //此访求返回用户和密码的对象
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                PasswordAuthentication pa = new PasswordAuthentication("*************.com", "*******");
                return pa;
            }
        });
        //设置session的调试模式,发布时取消
        s.setDebug(true);
        MimeMessage mimeMessage = new MimeMessage(s);
        try {
            try {
                mimeMessage.setFrom(new InternetAddress("*****.com","*****.com"));
                
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(userifno.getEMAIL()));//给指定的人发送邮件
            //设置主题
            mimeMessage.setSubject(title);
            mimeMessage.setSentDate(new Date());
            //设置内容
            mimeMessage.setText("您有信息需要处理,详情请点击链接http://******/workflow");
            mimeMessage.saveChanges();
            //发送
            Transport.send(mimeMessage);
            return "ok";//成功则返回“ok”
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return "fail";
    }
    

转载于:https://my.oschina.net/u/3288494/blog/1587843


http://www.niftyadmin.cn/n/705465.html

相关文章

Tensorflow(三)训练一个简单卷积神经网络

这是吴恩达老师第四课第一周的编程练习,题目是分析图片中手势得到手所表示的数字。 数据集我传到github上,可以下载https://github.com/penguin219/WU_Lesson4_week1 特别要注意的是,如果你使用的是新版本的tensorflow,很有可能…

IDC:全球以太网交换机和路由器市场整体看涨

近日,马萨诸塞州FRAMINGHAM - 全球以太网交换机市场(2/3层)2017年第三季度(2017年三季度)录得67.5亿美元的收入,同比增长7.4%。同时,全球整体企业和服务提供商(SP)路由器市场在三季度的收入为39.1亿美元,同比增长9.4个百分点。这些…

Tensorflow(四)Tensorboard简介

TensorBoard 简介 官网上给的定义是:The computations youll use tensorflow for (like training a massive deep neural network ) can be complex and confusing . To make it easier to understand, debug, and optimize tensorflow programs,were i…

Tensorflow(五)使用CNN对MNIST数据集进行分类

在tensorflow(二)中对MNIST数据集进行分类使用单层神经网络,梯度下降法以0.2的学习因子迭代了100次取得了92%的准确率,这个网络很简单,使用较大的学习因子也不会出现梯度爆炸或者梯度消失的情况,但是在复杂…

关于BP算法和梯度下降

最开始学习神经网络,感触最深的就是BP算法,当时只用到却没有好好体会它背后的深意,在RNN中也会用到一个类似的算法(BPTT下面会具体讲)。对神经网络有些了解,就会熟悉BP算法由两个部分组成,向前传…

Tensorflow(六)使用LSTM对MNIST数据集进行分类

对于RNN和LSTM不了解的朋友,可以去看看这两篇入门介绍,写的非常棒,在此特别感谢两位作者!! RNN入门:https://zhuanlan.zhihu.com/p/28054589 LSTM入门:http://colah.github.io/posts/2015-08-…

基于JS实现表单的自动验证功能

注:本文代码是在Github上找到的源码,在此基础上进行了修改。 表单验证的功能是通过JS代码实现的,在作者的验证JS代码中有已经设定好的数据格式,使用的是正则表达式,如果你想要设置自己的数据格式,可以在js…

Tensorflow(七)Retrain Google Inception V3

1.下载Inception V3模型 Download-Link 在tensorflow官网中可以直接下载,下载完压缩包以后解压,注意不要删除这个压缩包,后面可能会用到,然后在同目录下创建一个log文件夹,这些步骤可以手动完成,也可以用下…