邮件代码
package cn.pss.util.service;
import java.io.File;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import cn.pss.util.bean.SsnMailMessage;
/**
* <p>app. desc: 邮件发送服务</p>
* <p>company: redlotus </p>
* <p>time Dec 7, 2006 </p>
*
* @version 1.0
* @author blogw
*/
public class SendMailService{
protected Map pdto;
//protected IReader h8Reader;
/**
* Log
*/
private final Log log = LogFactory.getLog(getClass());
/**
* 邮件发送人的编号
*/
private String eid;
/**
* 邮件发送人的部门名称
*/
private String deptname;
/**
* 邮件定义
*/
private SsnMailMessage mailMessage ;
/**
* 邮件发送Bean
*/
private static JavaMailSender mailSender;
/**
* 邮件送信地址
*/
private String to;
/**
* 邮件标题
*/
private String subject;
/**
* 邮件模板路径
*/
private String pp;
/**
* 替换Velocity模版内容的数组
*/
private String[] args;
/**
* @param mailMessage 邮件定义
*/
public void setMailMessage(SsnMailMessage mailMessage) {
this.mailMessage = mailMessage;
}
/**
* 取得邮件信息
* @return
*/
public SsnMailMessage getMailMessage() {
return mailMessage;
}
/**
* @param mailSender 邮件发送Bean
*/
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
/**
*<p>desc: 送信</p>
*/
public void sendmail() {
try{
log.info("send mail thread start....");
String encode= mailMessage.getEncode();
String subject=(this.subject!=null?this.subject:mailMessage.getSubject());
String templete=mailMessage.getTemplete();
String prefix=mailMessage.getPrefix();
String from=mailMessage.getFrom();
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelp = new MimeMessageHelper(message,encode);
//velocity create mail context
VelocityContext context = new VelocityContext();
StringWriter sw = new StringWriter();
for(int i=0;i<args.length;i++){
context.put(prefix+(i+1), args[i]);
}
// VelocityEngine velocity=velocityConfig.getVelocityEngine();
//初始化参数
Properties properties=new Properties();
//设置velocity资源加载方式为file
properties.setProperty("resource.loader", "file");
String path = this.getClass().getResource("/").toString().replaceAll("^file:/", "");
path = path.substring(0, path.length()-1);
System.out.println(pp);
properties.setProperty("file.resource.loader.path", path.substring(0,path.lastIndexOf("/"))+pp);
//设置velocity资源加载方式为file时的处理类
properties.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
//实例化一个VelocityEngine对象
VelocityEngine velocity=new VelocityEngine(properties);
velocity.mergeTemplate(templete, encode, context, sw);
messageHelp.setTo(to);
messageHelp.setFrom(from);
messageHelp.setSubject(subject);
messageHelp.setText(sw.toString(), true);
FileSystemResource img=new FileSystemResource(new File("d:\\2009824172729.rar"));
messageHelp.addAttachment(MimeUtility.encodeWord("测试是否乱码"), img);
mailSender.send(message);
log.info("send mail thread end....");
}
catch(Exception ex) {
ex.printStackTrace();
if(eid!=null){
Map dt = new HashMap();
dt.put("eid",eid);
dt.put("deptname", deptname);
if(pdto.get("database")!=null){
//DbContextHolder.setDbType((String)pdto.get("database"));
}
//h8Reader.insert("Role.adderrorsend", dt);
ex.printStackTrace();
System.out.println("邮箱发送失败!");
log.error(ex);
}
}
}
/**
* @param to 邮件送信地址
* @param args 替换Velocity模版内容的数组
* @return
* @return true|false
*/
public synchronized boolean send(String to,String[] args,String pp,String subject,String eid,String deptname,Map pdto){
log.debug("/////////////////////////////////////" + args[0]);
log.debug("/////////////////////////////////////" + to);
this.to=to;
this.args=args;
this.pp=pp;
this.subject=subject;
this.eid=eid;
this.deptname=deptname;
//this.h8Reader=h8Reader;
this.pdto=pdto;
try{
this.sendmail();
}
catch(Exception e){
log.error(e);
e.printStackTrace();
return false;
}
return true;
}
}
报错信息
java.lang.IllegalStateException: Not in multipart mode - create an appropriate MimeMessageHelper via a constructor that takes a 'multipart' flag if you need to set alternative texts or add inline elements or attachments.
at org.springframework.mail.javamail.MimeMessageHelper.checkMultipart(MimeMessageHelper.java:383)
at org.springframework.mail.javamail.MimeMessageHelper.getRootMimeMultipart(MimeMessageHelper.java:400)
at org.springframework.mail.javamail.MimeMessageHelper.addAttachment(MimeMessageHelper.java:998)
at org.springframework.mail.javamail.MimeMessageHelper.addAttachment(MimeMessageHelper.java:1077)
at org.springframework.mail.javamail.MimeMessageHelper.addAttachment(MimeMessageHelper.java:1047)
at cn.pss.util.service.SendMailService.sendmail(SendMailService.java:136)
at cn.pss.util.service.SendMailService.send(SendMailService.java:175)
at cn.pss.util.MyThreadSendEmail.run(MyThreadSendEmail.java:33)
at java.lang.Thread.run(Thread.java:619)
求高人指点
------解决思路----------------------
/**
372: * Return whether this helper is in multipart mode,
373: * i.e. whether it holds a multipart message.
374: * @see #MimeMessageHelper(MimeMessage, boolean)
375: */
376: public final boolean isMultipart() {
377: return (this.rootMimeMultipart != null);
378: }
379:
380: /**
381: * Throw an IllegalStateException if this helper is not in multipart mode.
382: */
383: private void checkMultipart() throws IllegalStateException {
384: if (!isMultipart()) {
385: throw new IllegalStateException("Not in multipart mode - " +
386: "create an appropriate MimeMessageHelper via a constructor that takes a 'multipart' flag " +
387: "if you need to set alternative texts or add inline elements or attachments.");
388: }
389: }
390:
------解决思路----------------------
你这样写只能发送文本邮件
参考用javamail发送带附件的邮件
------解决思路----------------------
你这样写是不能发送带附件的邮件的
JavaMail发送邮件(带附件)(