public String sendMail(Mail entity){
if ("text".equals(entity.getType())){
return sendTextMail(entity);
}else if ("html".equals(entity.getType())){
return sendHtmlMail(entity);
}else if ("cureText".equals(entity.getType()))
{
return sendCureTextMail(entity);
}
else{
return "Wrong type, please select text or html.";
}
}
/*
* Send text mail
* (non-Javadoc)
* @see com.jiwu.publicejb.service.MailManager#sendMail(com.jiwu.publicejb.entity.Mail)
*/
public String sendHtmlMail(Mail mailBean){
InputStream in;
try {
in = new BufferedInputStream(new FileInputStream(EmailUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath().concat("mail.properties")));
Properties p = new Properties();
p.load(in);
//MyAuthenticator authen = new MyAuthenticator(p.getProperty("userName"),p.getProperty("password"));
//根据邮件会话属性和密码验证器构造一个发送邮件的session
Properties ps = new Properties();
ps.put("mail.smtp.host", p.getProperty("mail.smtp.host"));
ps.put("mail.smtp.auth", p.getProperty("mail.smtp.auth"));
Session session = Session.getDefaultInstance(ps, null);
//根据session创建消息
Message msg = new MimeMessage(session);
//创建发送地址
Address from = new InternetAddress(p.getProperty("userName"));
//为消息设置发送者
msg.setFrom(from);
//创建接收地址
InternetAddress[] addresses = new InternetAddress().parse(mailBean.getDestinationAddress());
//为消息设置接收地址
msg.setRecipients(Message.RecipientType.TO, addresses);
//设置发送日期
msg.setSentDate(new Date());
//设置消息主题
msg.setSubject(mailBean.getTheme());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mp = new MimeMultipart();
//设置文本内容
if(mailBean.getMessageBody()!= null)
{
//创建一个BodyPart
BodyPart mbp = new MimeBodyPart();
mbp.setContent(mailBean.getMessageBody(), "text/html;charset=utf-8");
mp.addBodyPart(mbp);
}
//附件处理
if(mailBean.getAttchmentPath()!= null)
{
for(int i=0 ; i < mailBean.getAttchmentPath().length ; i++ )
{
BodyPart mbp1 = new MimeBodyPart();
FileDataSource fds = new FileDataSource(mailBean.getAttchmentPath()[i]);
String lstSttachFileName[] = mailBean.getAttchmentPath()[i].split("\\.");
String attachFileName = lstSttachFileName[lstSttachFileName.length-1];
mbp1.setDataHandler(new DataHandler(fds));
//设置附件名称
mbp1.setFileName(MimeUtility.encodeText(attachFileName, "utf-8", null));
mp.addBodyPart(mbp1);
}
}
//将MiniMultipart设置为邮件内容
msg.setContent(mp);
//邮件服务器验证
Transport trans = session.getTransport("smtp");
trans.connect(p.getProperty("mail.smtp.host"),p.getProperty("userName"),p.getProperty("password"));
//发送邮件
trans.sendMessage(msg,msg.getAllRecipients());
System.out.println("发送成功");
trans.close();
return "ok";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "error";
}
}
/*
* Send html mail
* (non-Javadoc)
* @see com.jiwu.publicejb.service.MailManager#sendMail(com.jiwu.publicejb.entity.Mail)
*/
public String sendTextMail(Mail mailBean){
InputStream in;
try {
in = new BufferedInputStream(new FileInputStream(EmailUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath().concat("mail.properties")));
//in = new BufferedInputStream(new FileInputStream("D:\\mail.properties"));
Properties p = new Properties();
p.load(in);
//MyAuthenticator authen = new MyAuthenticator(p.getProperty("userName"),p.getProperty("password"));
//根据邮件会话属性和密码验证器构造一个发送邮件的session
Properties ps = new Properties();
ps.put("mail.smtp.host", p.getProperty("mail.smtp.host"));
ps.put("mail.smtp.auth", p.getProperty("mail.smtp.auth"));
Session session = Session.getDefaultInstance(ps, null);
//根据session创建消息
Message msg = new MimeMessage(session);
//创建发送地址
Address from = new InternetAddress(p.getProperty("userName"));
//为消息设置发送者
msg.setFrom(from);
//创建接收地址
InternetAddress[] addresses = new InternetAddress().parse(mailBean.getDestinationAddress());
//为消息设置接收地址
msg.setRecipients(Message.RecipientType.TO, addresses);
//设置发送日期
msg.setSentDate(new Date());
//设置消息主题
msg.setSubject(mailBean.getTheme());
//设置文本内容
msg.setText(mailBean.getMessageBody());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mp = new MimeMultipart();
//附件处理
if(mailBean.getAttchmentPath()!= null)
{
for(int i=0 ; i < mailBean.getAttchmentPath().length ; i++ )
{
BodyPart mbp1 = new MimeBodyPart();
FileDataSource fds = new FileDataSource(mailBean.getAttchmentPath()[i]);
String lstSttachFileName[] = mailBean.getAttchmentPath()[i].split("\\.");
String attachFileName = lstSttachFileName[lstSttachFileName.length-1];
mbp1.setDataHandler(new DataHandler(fds));
//设置附件名称
mbp1.setFileName(MimeUtility.encodeText(attachFileName, "utf-8", null));
mp.addBodyPart(mbp1);
}
}
//将MiniMultipart设置为邮件内容
msg.setContent(mp);
//邮件服务器验证
Transport trans = session.getTransport("smtp");
trans.connect(p.getProperty("mail.smtp.host"),p.getProperty("userName"),p.getProperty("password"));
//发送邮件
trans.sendMessage(msg,msg.getAllRecipients());
System.out.println("发送成功");
trans.close();
return "ok";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "error";
}
}
public String sendCureTextMail(Mail mailBean){
InputStream in;
try {
in = new BufferedInputStream(new FileInputStream(EmailUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath().concat("mail.properties")));
//in = new BufferedInputStream(new FileInputStream("D:\\mail.properties"));
Properties p = new Properties();
p.load(in);
//MyAuthenticator authen = new MyAuthenticator(p.getProperty("userName"),p.getProperty("password"));
//根据邮件会话属性和密码验证器构造一个发送邮件的session
Properties ps = new Properties();
ps.put("mail.smtp.host", p.getProperty("mail.smtp.host"));
ps.put("mail.smtp.auth", p.getProperty("mail.smtp.auth"));
Session session = Session.getDefaultInstance(ps, null);
//根据session创建消息
Message msg = new MimeMessage(session);
//创建发送地址
Address from = new InternetAddress(p.getProperty("userName"));
//为消息设置发送者
msg.setFrom(from);
//创建接收地址
InternetAddress[] addresses = new InternetAddress().parse(mailBean.getDestinationAddress());
//为消息设置接收地址
msg.setRecipients(Message.RecipientType.TO, addresses);
//设置发送日期
msg.setSentDate(new Date());
//设置消息主题
msg.setSubject(mailBean.getTheme());
//设置文本内容
msg.setText(mailBean.getMessageBody());
//邮件服务器验证
Transport trans = session.getTransport("smtp");
trans.connect(p.getProperty("mail.smtp.host"),p.getProperty("userName"),p.getProperty("password"));
//发送邮件
trans.sendMessage(msg,msg.getAllRecipients());
trans.close();
System.out.println("发送成功");
return "ok";
} catch (Exception e) {
e.printStackTrace();
return "error";
}
}
邮件配置放在SRC下面
mail.smtp.host=smtp.exmail.qq.com
mail.smtp.auth=true
userName=service@xxxx.com
password=密码
发送时候 如果遇到javax.mail.NoSuchProviderException: smtp
则加入mail.jar 解决
如果你用myEclipse进行开发的话,运行时可能会出现以下的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
原因是jar包版本不统一,解决方法如下:
删除Java EE 5 Libraries/javaee.jar/mail里的包有东西.
具体方法如下:
用rar打开X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar
,然后删除mail,一切就ok了.