邮件发送javamail
写在前面:
最近要将dms系统原始发邮件的功能(调用的webservice)改变成使用smtp服务来发送邮件(使用javamail来发送),这里简单记录下,方便日后有用到,直接拿来用即可。
首先导入需要用到的jar包:activation.jar mail.jar
涉及到的相关类:

直接上代码了:
TestMail.java
package dms.newmail; import java.util.Properties; import javax.mail.Session;
import javax.mail.Transport;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping; public class TestMail { static String to = "cmm-dwcp-sw03@mail.foxconn.com";
static String cc = ""; public static void main(String[] args){
String subject = "【DMS邮件测试】";
String content = "Dear all,\n\n" +
" DMS邮件功能测试!\n";
MailService mailService = new MailServiceImpl();
try { mailService.sendMail(to, cc,subject, content); } catch (Exception e) { e.printStackTrace();
}
} }
如果是要在内容中含有超链接,只需要在内容中加上<html><body><a href=\"这里写链接\">测试</a></body></html>标签就好了(eg:<html><body><a href="http://10.203.70.189/spas">測試</a></body></html>)
MailService.java
package dms.newmail;
public interface MailService {
/**
* 发送邮件
*
* @param to 接收人
* @param subject 邮件主题
* @param content 邮件内容
*/
void sendMail(String to, String subject, String content) throws Exception;
void sendNoThreadMail(String to, String subject, String content);
/**
* 发送邮件
* @param to 接收人
* @param cc 抄送人
* @param subject 邮件主题
* @param content 邮件内容
* @throws BusinessException
*/
void sendMail(String to, String cc,String subject, String content) throws Exception;
}
MailServieImpl.java
package dms.newmail; import org.apache.log4j.Logger;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.MimeMessage; public class MailServiceImpl implements MailService {
private static Logger logger = Logger.getLogger(MailServiceImpl.class); public void sendMail(String to, String subject, String content) {
MailThread mailThread = new MailThread(to, subject, content);
System.out.println("to:" + to + "\nsubject:" + subject + "\n\ncontent:" + content);
mailThread.setName("發送" + to + "郵件");
mailThread.start(); } public void sendNoThreadMail(String to, String subject, String content) {
System.out.println("to:" + to + "\n,subject:" + subject + "\n\n,content:" + content);
MailUtil mailUtil = new MailUtil();
Session session = mailUtil.getSession();
MimeMessage message = null;
try {
message = mailUtil.createSimpleMessage(session, to, subject, content);
} catch (Exception e) {
logger.error("创建邮件失败");
}
try {
mailUtil.sendMessage(session, message);
} catch (MessagingException e) {
logger.error("连接不上SMTP服务器");
}
System.out.println("發送郵件成功");
} /**
* to:发送给(多个邮箱以;号隔开)
* cc:抄送(多个邮箱以;号隔开)
* subject:主题
* content:内容
*/
public void sendMail(String to, String cc, String subject, String content) throws Exception {
MailThread mailThread = new MailThread(to, cc,subject, content);
// System.out.println(to);
mailThread.setName("發送" + to + "郵件"+"抄送给"+to);
mailThread.start();
} }
MailThread.java
package dms.newmail; import org.apache.log4j.Logger; import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.MimeMessage; public class MailThread extends Thread {
private static Logger logger = Logger.getLogger(MailThread.class); private String to;
private String subject;
private String content;
private String cc; public MailThread() {
} public MailThread(String to, String subject, String content) {
this.to = to;
this.subject = subject;
this.content = content;
} public MailThread(String to, String cc, String subject, String content) {
this.to = to;
this.cc = cc;
this.subject = subject;
this.content = content;
} public void run() {
MailUtil mailUtil = new MailUtil();
Session session = mailUtil.getSession();
MimeMessage message = null;
try {
message = mailUtil.createSimpleMessage(session, to, cc, subject, content);
} catch (Exception e) {
logger.error("创建邮件失败");
}
try {
mailUtil.sendMessage(session, message);
} catch (MessagingException e) {
logger.error("连接不上SMTP服务器");
} System.out.println("發送郵件成功");
}
}
MailUtil.java
package dms.newmail; 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 java.util.*; public class MailUtil {
//smtp服务器
public static final String SMTP_HOST = "10.134.28.95";
public static final String USER_NAME = "dmd.admin@foxconn.com";
public static final String PASS_WORD = "";
/**
* 获取邮件会话
*
* @return
*/
public Session getSession() {
Properties prop = new Properties();
prop.setProperty("mail.host", SMTP_HOST);
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "false");
//使用JavaMail发送邮件的5个步骤
//1、创建session
Session session = Session.getInstance(prop);
//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
return session;
} /**
* 创建简单文本
*
* @param session
* @param to
* @param subject
* @param content
* @return
*/
public MimeMessage createSimpleMessage(Session session, String to, String subject, String content) throws Exception {
MimeMessage message = null;
message = getMessage(session, to, subject); message.setText(content, "UTF-8");
return message;
} public MimeMessage createSimpleMessage(Session session, String to, String cc, String subject, String content) throws Exception {
MimeMessage message = null;
if (cc == null || "".equals(cc)) {
message = getMessage(session, to, subject);
} else {
message = getMessage(session, to, cc, subject);
} message.setText(content, "UTF-8");
return message;
} /**
* 获取邮件对象
*
* @param session 邮件会话
* @param to 收件人
* @param subject 邮件主题
* @return
* @throws Exception
*/
private MimeMessage getMessage(Session session, String to, String subject) throws Exception {
//创建邮件对象
MimeMessage message = new MimeMessage(session);
//指明邮件的发件人
message.setFrom(new InternetAddress(USER_NAME));
String[] addresses = to.split(";");
Set addSet = new HashSet();
for(int i=0;i<addresses.length;i++){
if (!"".equals(addresses[i].trim()))
addSet.add(addresses[i].trim());
} InternetAddress[] internetAddresses = new InternetAddress[addSet.size()];
Iterator iterable = addSet.iterator();
for (int i = 0; i < addSet.size(); i++) {
internetAddresses[i] = new InternetAddress((String) iterable.next());
}
//指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipients(Message.RecipientType.TO, internetAddresses);
//邮件的标题
message.setSubject(subject, "UTF-8");
message.setSentDate(new Date(System.currentTimeMillis()));
//返回创建好的邮件对象
return message;
} /**
* @param session
* @param to 收件人
* @param cc 抄送人
* @param subject 邮件主题
* @return
* @throws Exception
*/
private MimeMessage getMessage(Session session, String to, String cc, String subject) throws Exception {
//创建邮件对象
MimeMessage message = new MimeMessage(session);
//指明邮件的发件人
message.setFrom(new InternetAddress(USER_NAME));
String[] addresses = to.split(";");
String[] addresses2 = cc.split(";");
Set addSet = new HashSet();
Set addSet2 = new HashSet();
for(int i=0;i<addresses.length;i++){
if (!"".equals(addresses[i].trim()))
addSet.add(addresses[i].trim());
}
for(int i=0;i<addresses2.length;i++){
if (!"".equals(addresses2[i].trim()))
addSet2.add(addresses2[i].trim());
} InternetAddress[] internetAddresses = new InternetAddress[addSet.size()];
Iterator iterable = addSet.iterator();
for (int i = 0; i < addSet.size(); i++) {
internetAddresses[i] = new InternetAddress((String) iterable.next());
}
InternetAddress[] internetAddresses2 = new InternetAddress[addSet2.size()];
Iterator iterable2 = addSet2.iterator();
for (int i = 0; i < addSet2.size(); i++) {
internetAddresses2[i] = new InternetAddress((String) iterable2.next());
}
//指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipients(Message.RecipientType.TO, internetAddresses);
message.setRecipients(Message.RecipientType.CC, internetAddresses2);
//邮件的标题
message.setSubject(subject, "UTF-8");
message.setSentDate(new Date(System.currentTimeMillis()));
//返回创建好的邮件对象
return message;
} /**
* 发送邮件
*
* @param session 邮件会话
* @param message 邮件
* @throws MessagingException
*/
public void sendMessage(Session session, Message message) throws MessagingException {
//2、通过session得到transport对象
Transport ts = session.getTransport();
//3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
ts.connect(SMTP_HOST,USER_NAME,PASS_WORD);
// ts.connect();
//5、发送邮件
if (null != message)
ts.sendMessage(message, message.getAllRecipients());
ts.close();
} }
LogUtil.java:
package dms.newmail; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.PrintWriter;
import java.io.StringWriter; public class LogUtil {
private static Logger logger = LoggerFactory.getLogger(LogUtil.class); public static String getTrace(Throwable throwable) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
throwable.printStackTrace(printWriter);
StringBuffer stringBuffer = stringWriter.getBuffer();
return stringBuffer.toString();
} public static void main(String[] args) {
String strTrace=getTrace(new Throwable());
System.out.println(strTrace); new Throwable().printStackTrace();
}
}
好啦,代码搬运完成啦~~~
这一块主要还是斌哥在spas写好的,这边dms用到我只是拿现成的啦~~
参考链接:https://www.cnblogs.com/xdp-gacl/p/4216311.html-----JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
邮件发送javamail的更多相关文章
- javamail邮件发送例子
public class EmailTask{ // Session used by the javamail classes private Session session; ...
- Spring的javaMail邮件发送(带附件)
项目中经常用到邮件功能,在这里简单的做一下笔记,方便日后温习. 首先需要在配置文件jdbc.properties添加: #------------ Mail ------------ mail.smt ...
- JavaMail如何保证邮件发送成功
使用过JavaMail的api发送邮件的人可能会有这样一个疑惑:我如何知道我调用该api发送的邮件是否成功呢?一般的开放的api给我们调用都会有个返回值或者状态码,来告诉我们执行成功与否.但是Java ...
- JavaMail API 1.4.7邮件发送
下载oracle javaMail API: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive- ...
- JavaMail邮件发送不成功的那些坑人情况及分析说明
[我的Segmentfault原文]https://segmentfault.com/a/1190000008030346 前言 JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有 ...
- 基于javaMail的邮件发送--excel作为附件
基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...
- javaMail 邮件发送和接收示例,支持正文图片、html、附件(转)
转自:https://blog.csdn.net/star_fly4/article/details/52037587 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文 ...
- java-基于JavaMail的Java邮件发送
1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送
- Java 基于javaMail的邮件发送(支持附件)
基于JavaMail的Java邮件发送Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用户 ...
随机推荐
- mysql in/no in/like
% 任意字符 _ 任意一个字符 in (value,......) 在这里 not in (value,......) 不在这里 mysql> select 'a' not in (1,2,3, ...
- ew做socks5代理
这个工具和之前讲过的xxoo类似.链接:https://www.cnblogs.com/nul1/p/8883271.html https://zhuanlan.zhihu.com/p/3282215 ...
- atom编辑器插件atom-ternjs
这是官方文档:https://atom.io/packages/atom-ternjs 官方介绍: JavaScript code intelligence for atom with Tern. A ...
- Makefile系列之五 :函数
一.函数的调用语法 函数调用与变量一样,也是以“$”来标识的,其语法如下: $(<function> <arguments>) 或是 ${<function> &l ...
- sqlserver2008 死锁解决方法及性能优化方法
sqlserver2008 死锁解决方法及性能优化方法 原文: http://blog.csdn.net/kuui_chiu/article/details/48621939 十步优化SQL Serv ...
- python 使用国内源安装软件
python linux 等 使用国内源安装软件 速度更快 你值得拥有 ! 豆瓣源:pip install -i https://pypi.douban.com/simple/ 阿里源:pip ins ...
- tab切换 jQuery
$('p.guidan-load1').click(function(){ $("p.guidan-load1").removeClass("guidan-load12& ...
- mybatis 联结查询
一.查询 员工(tbl_employee)时,关联 查询出 员工对于的部门信息 (tab1_dept),一对一查询,或者多对一查询 适用 emp bean里面 包含 部门bean dept属性对象 1 ...
- sql server 完整备份、差异备份、事务日志备份
一. 理解: 完整备份为基础, 完整备份可以实物回滚还原,但是由于完整备份文件过大,对硬盘空间比较浪费这是就需要差异备份 或者 事务日志备份. 差异备份还原时,只能还原到备份的那个点, 日志备份还原时 ...
- 走进 Cake for .NET
一.什么是 Cake Cake(C# Make) 是一个使用 C# DSL 面向 Task 的跨平台构建自动化系统,像编译代码,复制文件和文件夹,运行单元测试,压缩文件和构建 NuGet 包. 更多 ...