您的位置:首页 > 编程语言 > Java开发

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

2013-12-06 22:33 573 查看

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.定义并发程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息