public boolean sendMailWithPic(String from, String to, String subject,
String content,
int subscribeid) {
// try {
// content = new String(content.getBytes("ISO-8859-1"),
// "GBK");
// } catch (UnsupportedEncodingException ex) {
// logger.error(ex.getMessage());
// }
Properties props = new Properties();
logger.info("服务器" + host);
props.put("mail.smtp.host", host); // 指定SMTP服务器
props.put("mail.smtp.auth", "true"); // 指定是否需要SMTP验证
try {
logger.info("收件人: " + to);
Session mailSession = Session.getDefaultInstance(props);
mailSession.setDebug(true); // 是否在控制台显示debug信息
LinkedList attachList = this.getLinkedlist(con); // 附件的list,它的element都是byte[],即图片的二进制流
logger.info("attachList的值为::::"+attachList.size());
Message message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress(from)); // 发件人
message.addRecipient(Message.RecipientType.TO, new InternetAddress(
to)); // 收件人
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
message.setSubject("=?GB2312?B?" + enc.encode(subject.getBytes()) +
"?=");
// 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
MimeMultipart mmt = new MimeMultipart();
// 新建一个存放信件内容的BodyPart对象
BodyPart mbp = new MimeBodyPart();
mbp.setContent(content, "text/html; charset=GBK");
// 这句很重要,千万不要忘了
mmt.setSubType("related");
mmt.addBodyPart(mbp);
// add the attachments
for (int i = 0; i < attachList.size(); i++) {
logger.info("i的值为::::::::::::"+i);
// 新建一个存放附件的BodyPart
MimeBodyPart mdp = new MimeBodyPart();
DataHandler dh = new DataHandler(new ByteArrayDataSource((byte[])
attachList.get(i), "application/octet-stream"));
mdp.setDataHandler(dh);
// 加上这句将作为附件发送,否则将作为信件的文本内容
mdp.setFileName(new Integer(i).toString() + ".jpg");
mdp.setHeader("Content-ID", "<IMG" + new Integer(i).toString()+">");
logger.info("jdjdjdjdjdjdjdjdj"+"<IMG" + new Integer(i).toString()+">");
// 将含有附件的BodyPart加入到MimeMultipart对象中
mmt.addBodyPart(mdp);
}
// 把mm作为消息对象的内容
message.setContent(mmt);
message.saveChanges();
// Multipart mm = new MimeMultipart();
//
// mm.addBodyPart(mbp); //将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
//
// message.setContent(mm); //把mm作为消息对象的内容
//
// message.saveChanges();
Transport transport = mailSession.getTransport("smtp");
try {
transport.connect(host, user, password);
transport.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
logger.error(e.getMessage());
boolean bl = DBOperate.executePreparedUpdate(e.getMessage(),
subscribeid, con);
while (bl == false) {
sleep(6000);
if (con != null) {
dboperate.close(con);
}
con = null;
con = getConnection();
bl = DBOperate.executePreparedUpdate(e.getMessage(),
subscribeid, con);
}
return false;
} finally {
transport.close();
}
} catch (Exception e) {
logger.error(e.getMessage());
boolean bl = DBOperate.executePreparedUpdate(e.getMessage(),
subscribeid, con);
while (bl == false) {
sleep(6000);
if (con != null) {
dboperate.close(con);
}
con = null;
con = getConnection();
bl = DBOperate.executePreparedUpdate(e.getMessage(),
subscribeid, con);
}
return false;
}
String sql = "update CSBILLSUBSCRIBE t set SENDTIME=sysdate,SENDSTATUS='发送成功!' where t.SUBSCRIBEID=" +
subscribeid;
boolean bl = DBOperate.executeUpdate(sql, con);
while (bl == false) {
sleep(6000);
if (con != null) {
dboperate.close(con);
}
con = null;
con = getConnection();
bl = DBOperate.executeUpdate(sql, con);
}
logger.info("发送成功");
return true;
}
/**
* 从数据库中去得图片的二进制数组,添加到LinkedList
* @param content String
* @param subscribeid int
* @param con Connection
* @return boolean
*/
public LinkedList getLinkedlist(Connection con) {
PreparedStatement ps = null;
ResultSet rs = null;
LinkedList liklist=new LinkedList();
String sql = "select * from csmpicupload order by PICID";
//String sql = "update CSBILLSUBSCRIBE t set SENDTIME=sysdate,SENDSTATUS=? where t.SUBSCRIBEID=?";
//content="发送失败!,原因:"+content;
logger.info(sql);
try {
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Blob bb = rs.getBlob("PICSTORE");
long length=bb.length();
byte[] bt=bb.getBytes(1,(int)length);
liklist.add(bt);
}
} catch (SQLException ex2) {
logger.info("数据库异常错误!" + ex2.getMessage());
return null;
} finally {
try {
if (ps != null) {
ps.close();
}
} catch (SQLException ex3) {
logger.info("数据库异常错误!" + ex3.getMessage());
return null;
}
}
return liklist;
}
-------------------------------------------------------------------------------------
邮件的内容如下:
sb = new StringBuffer();
String content = "";
sb.append("<style type=/"text/css/">.font { font-size: 12px; color: #000000}.font3 { font-size: 12px; font-weight: bold; color: #000000}</style><table id=/"printTable/" width=/"540/" border=/"0/" cellpadding=/"0/" cellspacing=/"0/" align=/"center/">");
sb.append("<tr><td align=/"left/" colspan=/"2/"><img src=/"cid:IMG0/" width=/"100/" height=/"30/" border=/"0/"></td><td align=/"right/" colspan=/"4/"><img src=/"cid:IMG1/" width=/"100/" height=/"30/" border=/"0/"></td></tr>");
sb.append(
"<tr><TD colspan=/"3/" align=/"center/" class=/"font3/">电信有限公司").
append(oraName).append("分公司“我的e家”客户帐单<br></TD></tr><tr><TD align=/"left/" class=/"font/" width=/"400/" colspan=/"2/">客户名称:");
sb.append(customerorderbill.getACCTNAME()).append(
"</TD><TD align=/"right/" class=/"font/">计费周期:").
append(customerorderbill.getSTATEDATE()).append("<br>查询时间:").
append(customerorderbill.getCURDATE()).append(
"</TD></tr><tr></table>");
sb.append("<table width=/"540/" border=/"0/" cellpadding=/"0/" cellspacing=/"0/" align=/"center/"><tr><td align=/"center/" valign=/"top/" colspan=/"3/"><table id=/"sortTable/" width=/"540/" border=/"0/" cellpadding=/"4/" cellspacing=/"1/" bgcolor=/"#CCCCCC/" class=/"a/"><tr><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/" >基础包</TD><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/">");
sb.append(customerorderbill.getPHONE()).append("</TD><TD class=/"font/" align=/"center/" colspan=/"2/" bgcolor=/"#FFFFFF/"></TD></tr><tr><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/" width=/"120/">可选包</TD><TD class=/"font/" align=/"center/" width=/"140/" bgcolor=/"#FFFFFF/">").
append(customerorderbill.getPHS1()).append(" </TD><TD class=/"font/" align=/"center/" width=/"140/" bgcolor=/"#FFFFFF/">");
sb.append(customerorderbill.getPHS2()).append(" </TD><TD class=/"font/" align=/"center/" width=/"140/" bgcolor=/"#FFFFFF/">").
append(customerorderbill.getPHS3()).append(" </TD> </tr></table><table id=/"sortTable2/" width=/"540/" border=/"0/" cellpadding=/"4/" cellspacing=/"1/" bgcolor=/"#CCCCCC/"><tr><TD class=/"font/" align=/"center/" colspan=/"6/">“我的e家”基础包及可选包成员合计费用信息(元)</TD></tr><tr><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/" width=/"130/">费用项目</TD><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/" width=/"50/">费用</TD><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/" width=/"130/">费用项目</TD><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/" width=/"50/">费用</TD><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/" width=/"130/">费用项目</TD><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/" width=/"50/">费用</TD></tr>");
logger.info("-------------开始循环-----------");
int num = list.size(); //费用总条数
for (Iterator it = list.iterator(); it.hasNext(); ) {
Acctitem acct = new Acctitem();
acct = (Acctitem) it.next();
// logger.info(acct.getACCTITEMTYPENAME() +
// ":::::::&&&&&&&&&&&&&&&&&&&&&&&&&:::::::::" +
// acct.getACCTITEMCHARGE());
}
//logger.info("list.size--------------" + num);
int hang = num / 3; //行数
if (num % 3 > 0) {
hang = hang + 1;
}
int m = 1;
logger.info("-------------开始费用总计-----------");
while (m <= hang) {
int k = 1;
sb.append("<tr>");
for (int b = 0; b < hang * 3; b++) {
//for (Iterator it = list.iterator(); it.hasNext(); ) {
// logger.info("-------------bean 循环-----------");
String paraname = "";
double paravalue = 0;
if (k == m) {
if (b < list.size()) {
Acctitem acct = new Acctitem();
acct = (Acctitem) list.get(b);
paraname = acct.getACCTITEMTYPENAME();
paravalue = acct.getACCTITEMCHARGE();
}
int dian = paraname.indexOf("、"); //判断是否缩进。
if (dian == -1) {
sb.append(
"<td align=/"left/" bgcolor=/"#FFFFFF/" class=/"font/"> ").
append(paraname).append(
"</td><td align=/"center/" bgcolor=/"#FFFFFF/" class=/"font/">").
append(paravalue).append("</td>");
} else {
sb.append(
"<td align=/"left/" bgcolor=/"#FFFFFF/" class=/"font3/">").
append(paraname).append(
"</td><td align=/"center/" bgcolor=/"#FFFFFF/" class=/"font/">").
append(paravalue).append("</td>");
}
} else if (k == m + hang) {
if (b < list.size()) {
Acctitem acct = new Acctitem();
acct = (Acctitem) list.get(b);
paraname = acct.getACCTITEMTYPENAME();
paravalue = acct.getACCTITEMCHARGE();
}
int dian = paraname.indexOf("、"); //判断是否缩进。
if (dian == -1) {
sb.append(
"<td align=/"left/" bgcolor=/"#FFFFFF/" class=/"font/"> ").
append(paraname).append(
"</td><td align=/"center/" bgcolor=/"#FFFFFF/" class=/"font/">").
append(paravalue).append("</td>");
} else {
sb.append(
"<td align=/"left/" bgcolor=/"#FFFFFF/" class=/"font3/">").
append(paraname).append(
"</td><td align=/"center/" bgcolor=/"#FFFFFF/" class=/"font/">").
append(paravalue).append("</td>");
}
} else if (k == hang * 2 + m) {
if (b < list.size()) {
Acctitem acct = new Acctitem();
acct = (Acctitem) list.get(b);
paraname = acct.getACCTITEMTYPENAME();
paravalue = acct.getACCTITEMCHARGE();
}
int dian = paraname.indexOf("、"); //判断是否缩进。
if (dian == -1) {
sb.append(
"<td align=/"left/" bgcolor=/"#FFFFFF/" class=/"font/"> ").
append(paraname).append(
"</td><td align=/"center/" bgcolor=/"#FFFFFF/" class=/"font/">").
append(paravalue).append("</td>");
} else {
sb.append(
"<td align=/"left/" bgcolor=/"#FFFFFF/" class=/"font3/">").
append(paraname).append(
"</td><td align=/"center/" bgcolor=/"#FFFFFF/" class=/"font/">").
append(paravalue).append("</td>");
}
}
k++;
}
sb.append("</tr>");
m++;
}
sb.append("<tr><TD class=/"font/" align=/"center/" bgcolor=/"#FFFFFF/" >本月费用合计</TD> <TD class=/"font/" align=/"center/" colspan=/"5/" bgcolor=/"#FFFFFF/">").
append(customerorderbill.getBILLCHARGE()).append("元</TD></tr></table><table id=/"sortTable3/" width=/"540/" border=/"0/" cellpadding=/"4/" cellspacing=/"1/" bgcolor=/"#CCCCCC/" class=/"a/"><tr><TD class=/"font/" align=/"center/" colspan=/"6/">通信量信息</TD></tr><tr><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">本地通话时长<br>(分钟)</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">国内长话时长<br>(分钟)</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">国际长话时长<br>(分钟)</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">台港澳长话时长<br>(分钟)</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">点对点短信<br>(条)</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">宽带上网时长<br>(小时)</TD></tr><tr><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">");
sb.append(customerorderbill.getBDDURATION()).append(
"</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">").
append(customerorderbill.getGNDURATION()).append(
"</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">").
append(customerorderbill.getGJDURATION()).append(
"</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">").
append(customerorderbill.getTGODURATION()).append(
"</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">").
append(customerorderbill.getSMSDURATION()).append(
"</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">").
append(customerorderbill.getNETDURATION());
sb.append("</TD></tr><tr><TD class=/"font/" align=/"center/" colspan=/"6/">积分信息(分)</TD></tr><tr><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/" width=/"90/">本期新增<br>A</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/" width=/"90/">上期末积余<br>B</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/" width=/"90/">本期使用<br>C</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/" width=/"90/">本期末积余<br>D=A+B-C</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/" width=/"90/"> </TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/" width=/"90/"> </TD></tr>");
sb.append(
"<tr><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">").
append(customerorderbill.getTACHARGECNT()).append(
"</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">").
append(customerorderbill.getPECHARGECNT()).append(
"</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">").
append(customerorderbill.getTTCHARGECNT()).append(
"</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/">").
append(customerorderbill.getTECHARGECNT()).append("</TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/"> </TD><TD class=/"font/" align=/"center/" bgcolor=/"#fafafa/"> </TD></tr>");
sb.append("<tr><TD class=/"font/" align=/"center/" colspan=/"6/" bgcolor=/"#fafafa/">注:本积分统计至上月底,后付费用户未缴费部分的消费积分因未激活,不包含在上述积分中</TD></tr></table></td></tr>");
sb.append("<tr><td align=/"left/"><img src=/"cid:IMG2/" width=/"150/" height=/"30/" border=/"0/"></td><td align=/"right/"><img src=/"cid:IMG3/" width=/"150/" height=/"30/" border=/"0/"></td></tr></table>");
content = sb.toString();