EBS中使用JAVA方式发送HTML格式邮件

来源:互联网 发布:淘宝商城商业模式 编辑:程序博客网 时间:2024/06/07 15:45


EBS中使用JAVA方式发送HTML格式邮件

一、开发工具:JDeveloper
需要添加的Library:activation.jar和javax.mail.jar(自行下载)

二、注意事项:

1、设置项目的编码格式为UTF-8
2、使用Rebuiled或者run生成.class文件
3、将.class文件上传到服务器中的$JAVA_TOP目录相应的文件夹下

三、开发思想:
1、发送HTML的公共主程序可以参考java的发送html邮件的程序;
2、在邮件中显示出html的样式效果是根据EBS中HTML报表的代码样式转换而来

四、实现程序:
1、主程序SendHtmlMail.java中的host、user、pwd、from这里是写死了,可以提取出来当参数传入更具有通用型
package cux.oracle.apps.pos.Util;import java.io.FileOutputStream;import java.io.UnsupportedEncodingException;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Date;import java.util.Properties;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import oracle.apps.fnd.cp.request.JavaConcurrentProgram;/*** 创建 HTML 格式的邮件** @author Jason Gu*/public class SendHtmlMail{  public String sendMessage(String host, String user, String pwd, String from,                            String to, String subject,                            String body) throws MessagingException,                                                java.io.UnsupportedEncodingException  {    Properties props = new Properties();    // 设置发送邮件的邮件服务器的属性    props.put("mail.smtp.host", host);    // 需要经过授权,也就是用户名和密码的校验,这样才能通过验证(一定要有这一条)    props.put("mail.smtp.auth", "true");    // 创建该邮件应用程序所需的环境信息以及会话信息    Session session = Session.getDefaultInstance(props);    // 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使    // 用(你可以在控制台(console)上看到发送邮件的过程)    session.setDebug(true);    // 根据上面的 Session 实例创建 MimeMessage 实例,即一封邮件    MimeMessage msg = new MimeMessage(session);    try    {      // 设置发件人地址      msg.setFrom(new InternetAddress(from));      // 设置收件人地址      msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));      // 设置 E-mail 主题      msg.setSubject(subject);      // 设置发送时间      msg.setSentDate(new Date());      // 设置 E-mail 正文部分      // msg.setText(body);      msg.setContent(body, "text/html;charset = UTF-8");      // 保存对该 MimeMessage 实例的更改      msg.saveChanges();      // 发送邮件      Transport transport = session.getTransport("smtp");      // 连接服务器的邮箱      transport.connect(host, user, pwd);      // 把邮件发送出去      transport.sendMessage(msg, msg.getAllRecipients());      transport.close();      // 将 msg 对象中内容写入文件      msg.writeTo(new FileOutputStream("SendHtmlMail.eml"));      return "S";    } catch (Exception e)    {      e.printStackTrace();      return "E";    }  }  public static String main(String to,String subject,String body) throws MessagingException,                                              UnsupportedEncodingException  {    String host = "172.17.27.249"; // smtp服务器    String user = "Ebs-admin"; // 用户名    String pwd = "[CONTRACT]2013(approval)"; // 密码    String from = "Ebs-admin@jd.com";    SendHtmlMail sendmail = new SendHtmlMail();    String result =      sendmail.sendMessage(host, user, pwd, from, to, subject, body);    return result;  }}
2、邮件内容和收件人的程序CuxPtebsReport.java
package cux.oracle.apps.pos.Util;import java.sql.PreparedStatement;import java.util.Date;import java.text.SimpleDateFormat;import oracle.apps.fnd.common.VersionInfo;import oracle.apps.fnd.cp.request.CpContext;import oracle.apps.fnd.cp.request.JavaConcurrentProgram;import oracle.apps.fnd.cp.request.LogFile;import oracle.apps.fnd.cp.request.ReqCompletion;import oracle.apps.fnd.framework.OAException;import oracle.apps.fnd.util.ParameterList;import java.sql.Connection;import java.sql.ResultSet;import oracle.apps.fnd.util.NameValueType;import cux.oracle.apps.pos.Util.SendHtmlMail;/***  请求调用生成 HTML 格式的邮件** @author Jason Gu*/public class CuxPtebsReport implements JavaConcurrentProgram{  public static final String RCS_ID =    "$Header: CuxRepayReport.java 120.1 2013/09/06 14:36:06 sabatra noship $";  public static final boolean RCS_ID_RECORDED =    VersionInfo.recordClassVersion("$Header: CuxRepayReport.java 120.1 2013/09/06 14:36:06 sabatra noship $",                                   "%packagename%");  protected LogFile log;  protected ReqCompletion reqc;  private static SimpleDateFormat mDateFormat;  private String l_return_status = "S";  public void runProgram(CpContext cpContext)  {    ParameterList lPara = cpContext.getParameterList();    StringBuffer com_content = new StringBuffer();    StringBuffer dept_content = new StringBuffer();    String sendresult = "S";    String cux_combody = new String();    String cux_deptbody = new String();    String body = new String();    try    {      this.log = cpContext.getLogFile();      this.reqc = cpContext.getReqCompletion();      Connection con = cpContext.getJDBCConnection();      this.log.writeln("input parameters list:", 1);      while (lPara.hasMoreElements())      {        NameValueType nvt = lPara.nextParameter();        this.log.writeln(nvt.getName() + ":" + nvt.getValue(), 1);      }      //获取当前日期      java.util.Calendar c = java.util.Calendar.getInstance();      java.text.SimpleDateFormat f =        new java.text.SimpleDateFormat("yyyy年MM月dd日");      //邮件主题      String subject = f.format(c.getTime()) + "新增公司和部门";      //表格标题      String com = f.format(c.getTime()) + "数据新增公司";      String dept = f.format(c.getTime()) + "数据新增部门";      String comheader =        "<table border=1 cellspacing=0 cellpadding=2><tr><td colspan=4 align=center>" +        com +        "</td></tr><tr><td nowrap>公司编码</td><td nowrap>公司名称</td><td nowrap>生效日期</td><td>最后更新日期</td></tr>";      String combody =        "<tr align=left><td nowrap>VAR_A</td><td nowrap>VAR_B</td><td nowrap>VAR_C</td><td nowrap>VAR_D</td></tr>";      String deptheader =        "<table border=1 cellspacing=0 cellpadding=2><tr><td colspan=4 align=center>" +        dept +        "</td></tr><tr><td nowrap>部门编码</td><td nowrap>部门名称</td><td nowrap>生效日期</td><td>最后更新日期</td></tr>";      String deptbody =        "<tr align=left><td nowrap>VAR_E</td><td nowrap>VAR_F</td><td nowrap>VAR_G</td><td nowrap>VAR_H</td></tr>";      String foot = "</table><br><br>";      PreparedStatement compre = null;      PreparedStatement deptpre = null;      PreparedStatement updatecompre = null;      PreparedStatement updatedeptpre = null;      PreparedStatement mailtopre = null;      ResultSet comresult = null;      ResultSet deptresult = null;      ResultSet mailtoresult = null;      ResultSet updatecomresult = null;      ResultSet updatedeptresult = null;      this.log.writeln("start datebase connection...", 1);      //新增公司数据      String comsql =        "SELECT company_code, company_name, to_char(start_date, 'yyyy-mm-dd') start_date, to_char(last_update_date,'yyyy-mm-dd') last_update_date \n" +        "FROM cux_test_com_data WHERE send_flag = 'N' \n";      compre = con.prepareStatement(comsql);      comresult = compre.executeQuery();      while (comresult.next())      {        this.log.writeln("com_code:" + comresult.getString("company_code"), 1);        cux_combody = combody;        cux_combody =            cux_combody.replace("VAR_A", comresult.getString("company_code"));        cux_combody =            cux_combody.replace("VAR_B", comresult.getString("company_name"));        String com_start_date = comresult.getString("start_date");        if (com_start_date == null)        {          com_start_date = " ";        }        String date = com_start_date;        cux_combody = cux_combody.replace("VAR_C", date);        cux_combody =            cux_combody.replace("VAR_D", comresult.getString("last_update_date"));        com_content.append(cux_combody);      }      //部门新增数据      String deptsql =        "SELECT dept_code, dept_name, to_char(start_date,'yyyy-mm-dd') start_date,to_char(last_update_date,'yyyy-mm-dd') last_update_date \n" +        "  FROM cux_test_dept_data where send_flag = 'N'";      deptpre = con.prepareStatement(deptsql);      deptresult = deptpre.executeQuery();      //deptresult.      while (deptresult.next())      {        cux_deptbody = deptbody;        cux_deptbody =            cux_deptbody.replace("VAR_E", deptresult.getString("dept_code"));        cux_deptbody =            cux_deptbody.replace("VAR_F", deptresult.getString("dept_name"));        String dept_start_date = deptresult.getString("start_date");        if (dept_start_date == null)        {          dept_start_date = " ";        }        String start_date = dept_start_date;        cux_deptbody = cux_deptbody.replace("VAR_G", start_date);        cux_deptbody =            cux_deptbody.replace("VAR_H", deptresult.getString("last_update_date"));        dept_content.append(cux_deptbody);      }      int resp_id = cpContext.getRespId();      this.log.writeln("resp_id:" + resp_id, 2);      //获取职责id      String addrsql =        "SELECT distinct pf.email_address\n" + "        FROM fnd_user_resp_groups_direct c, fnd_responsibility r, fnd_user fu, per_all_people_f pf\n" +        "       WHERE c.responsibility_id = r.responsibility_id\n" +        "         AND c.user_id = fu.user_id\n" +        "         AND pf.email_address is not null\n" +        "         AND fu.employee_id = pf.person_id\n" +        "         AND c.responsibility_id = " + resp_id;      //this.log.writeln("addrsql:" + addrsql, 2);      mailtopre = con.prepareStatement(addrsql);      mailtoresult = mailtopre.executeQuery();      while (mailtoresult.next())      {        String addr = mailtoresult.getString("email_address");        this.log.writeln("addr:" + addr, 1);        if (addr != null && addr != "")        {          if (!"".equals(com_content.toString()) ||              !"".equals(dept_content.toString()))          {            this.log.writeln("com not null or dept not null in", 4);            //邮件内容            if (com_content.toString().equals("") &&                !"".equals(dept_content.toString()))            {              this.log.writeln("com null,dept not null", 4);              body = deptheader + dept_content.toString() + foot;            } else if (!"".equals(com_content.toString()) &&                       dept_content.toString().equals(""))            {              this.log.writeln("com not null,dept null", 4);              body = comheader + com_content.toString() + foot;            } else if (!"".equals(com_content.toString()) &&                       !"".equals(dept_content.toString()))            {              this.log.writeln("com not null,dept not null", 4);              body =                  comheader + com_content.toString() + foot + deptheader + dept_content.toString() +                  foot;            }            //发送邮件            SendHtmlMail sendmail = new SendHtmlMail();            sendresult = sendmail.main(addr, subject, body);          } else          {            this.log.writeln("没有需要发送的内容", 4);          }        } else        {          write("resp_id:" + resp_id + "未维护邮箱");        }      }      if (!"S".equals(sendresult))      {        this.l_return_status = "E";      }      if ("S".equals(this.l_return_status))      {        this.reqc.setCompletion(0, "program completed Successfully.");        String update_com_sql =          "UPDATE cux_test_com_data c\n" + "   SET c.send_flag = 'Y', c.last_update_date = SYSDATE, c.last_updated_by = fnd_global.user_id\n" +          " WHERE c.send_flag = 'N'";        updatecompre = con.prepareStatement(update_com_sql);        updatecomresult = updatecompre.executeQuery();        String update_dept_sql =          "UPDATE cux_test_dept_data d\n" + "   SET d.send_flag = 'Y', d.last_update_date = SYSDATE, d.last_updated_by = fnd_global.user_id\n" +          " WHERE d.send_flag = 'N'";        updatedeptpre = con.prepareStatement(update_dept_sql);        updatedeptresult = updatedeptpre.executeQuery();      } else      {        this.reqc.setCompletion(2,                                "program completed with error. Please see request log for details.");      }    }    catch (OAException localOAException)    {      localOAException.printStackTrace();      this.reqc.setCompletion(2, localOAException.getMessage());    } catch (Exception localException)    {      localException.printStackTrace();      this.reqc.setCompletion(2, localException.toString());    }  }  protected void write(String paramString)  {    this.log.writeln(getCurrDateStr() + paramString, 0);  }  private String getCurrDateStr()  {    if (mDateFormat == null)    {      mDateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss:SSS");    }    return "[" + mDateFormat.format(new Date()) + "] ";  }}
五、配置
1、将生成的.class文件上传至:$JAVA_TOP/cux/oracle/apps/pos/Util

2、定义并发程序
1.定义可执行:
Execution Method:Java Concurrent Program
Execution File Nam:CuxPtebsReport
Execution File Path:cux.oracle.apps.pos.Util
2.定义并发程序



原创粉丝点击