版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一 需求:
1 java实现邮件发送
2 发送内容:
① 正文: 图片说明和图片
② 附件一: 图片作为附件发送
③ 附件二: Excel表格
二 思路:
1首先创建一个 Java 工程,把下载好的 javax.mail.jar 作为类库加入工程
2邮件创建步骤:
配置连接邮件服务器的参数( 邮件服务器SMTP, 是否需要SMTP验证 )
创建一个邮件对象( MimeMessage )
设置发件人,收件人 ( 可增加多个收件人,抄送人,密送人 )
设置邮件标题, 正文 , 附件等
设置显示的发送时间
三 操作:
(一). 在pom.xml中添加依赖
举例: 添加1.4版本的javax.mail ,如下图
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
(二) 代码
在Controller层
/**
* sendEmail 发邮件
*
* @param to 参数to为收件人,只能为单个收件人
* @return
* @throws UnsupportedEncodingException
* @throws MessagingException
*/
@RequestMapping(value = "/sendEmail",method = RequestMethod.GET)
public ResponseEntity<?> sendEmail( @RequestParam(value = "to") String to)
throws UnsupportedEncodingException, MessagingException{
topicService.sendMail(to);
return Utility.ok();
}
在TopicService中:
/** The logger 日志. */
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* sendMail 发邮件
*
* @param to 收件人
* @throws MessagingException
* @throws UnsupportedEncodingException
*/
public void sendMail(String to) throws UnsupportedEncodingException, MessagingException {
//1.创建邮件对象
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.51testing.com"); // 指定SMTP服务器
properties.put("mail.smtp.auth", "true"); // 指定是否需要SMTP验证
Session session = Session.getInstance(properties);
MimeMessage message =new MimeMessage(session);
//2.设置发件人
// InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码
message.setFrom(new InternetAddress("[email protected]","tang","UTF-8"));
//3.设置收件人
//To收件人 CC 抄送 BCC密送
message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(to,"xin","UTF-8"));
// message.addRecipient(MimeMessage.RecipientType.CC,new InternetAddress("409****[email protected]","xinyuezi","UTF-8"));
//4.设置标题
message.setSubject("测试邮件" ,"UTF-8");
//message.setContent("Test Content:这是一封测试邮件...","text/html;charset=UTF-8");
//5.设置邮件正文
//一个Multipart对象包含一个或多个bodypart对象,组成邮件正文
MimeMultipart multipart = new MimeMultipart();
//读取本地图片,将图片数据添加到"节点"
MimeBodyPart image = new MimeBodyPart();
DataHandler dataHandler1 = new DataHandler(new FileDataSource("C:\\Users\\Public\\Pictures\\Sample Pictures\\flower.jpg"));
image.setDataHandler(dataHandler1);
image.setContentID("image_flower");
//创建文本节点
MimeBodyPart text = new MimeBodyPart();
text.setContent("这张图片是花<br/><img src='cid:image_flower'/>","text/html;charset=UTF-8");
//创建附件节点 读取本地文件,并读取附件名称
MimeBodyPart file1 = new MimeBodyPart();
DataHandler dataHandler2 = new DataHandler(new FileDataSource("C:\\Users\\Public\\Pictures\\Sample Pictures\\growing.png"));
file1.setDataHandler(dataHandler2);
file1.setFileName(MimeUtility.encodeText(dataHandler2.getName()));
MimeBodyPart file2 = new MimeBodyPart();
DataHandler dataHandler3 = new DataHandler(new FileDataSource("E:\\Tang\\topics.xlsx"));
file2.setDataHandler(dataHandler3);
file2.setFileName(MimeUtility.encodeText(dataHandler3.getName()));
//将文本和图片添加到multipart
multipart.addBodyPart(text);
multipart.addBodyPart(image);
multipart.addBodyPart(file1);
multipart.addBodyPart(file2);
multipart.setSubType("mixed");//混合关系
message.setContent(multipart);
message.setSentDate(new Date());
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect("smtp.51testing.com","[email protected]","(需修改,填写自己的邮箱密码)");
transport.sendMessage(message,message.getAllRecipients());
transport.close();
logger.info(Calendar.getInstance().getTime()+" : # Send mail to "+" success #");
System.out.println("sendMail-----结束了");
}
(三) 结果显示
注: 本文中参数to只适合单个收件人, 不适合群发邮件
但是如果需要发送多个, 可以多选抄送CC
扫描二维码关注公众号,回复:
7197835 查看本文章