1.关联jar包:   activation.jar   mail.jar

2.调用 

@Test
public void test1() {
List<String> imageUrlList = Arrays.asList(new String[] { "src/美女1.jpg", "src/2.jpg", "src/2.jpg" });
List<String> attachmentUrlList = Arrays.asList(new String[] { "src/光辉岁月.MP3", "src/美女1.jpg", "src/2.jpg" }); MailInfo mailInfo = new MailInfo("us0911@126.com", "subject", "content");
mailInfo.setImageUrlList(imageUrlList);
MailUtils.getInstance().sendMail(mailInfo);
}

3.封装代码

3.1配置文件: src/mailConfig.properties

#邮件发送服务器地址: 比如126邮件地址为 smtp.126.com
mail.smtp.host = localhost
#发件人账户
emailAddress = a@bvb.de
#发件人密码
password = a

3.2 实体类

package de.bvb.utils;

import java.util.List;

public class MailInfo {
private String to;
private String subject;
private String content;
private List<String> imageUrlList;
private List<String> attachmentUrlList; public MailInfo() {
super();
} public MailInfo(String to, String subject, String content) {
super();
this.to = to;
this.subject = subject;
this.content = content;
} public String getTo() {
return to;
} public void setTo(String to) {
this.to = to;
} public String getSubject() {
return subject;
} public void setSubject(String subject) {
this.subject = subject;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
} public List<String> getImageUrlList() {
return imageUrlList;
} public void setImageUrlList(List<String> imageUrlList) {
this.imageUrlList = imageUrlList;
} public List<String> getAttachmentUrlList() {
return attachmentUrlList;
} public void setAttachmentUrlList(List<String> attachmentUrlList) {
this.attachmentUrlList = attachmentUrlList;
} }

实体类

package de.bvb.utils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.util.List;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.FileDataSource;
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.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility; public class MailUtils {
///////////////////////////////////////////////////////////////
//单例模式//////////////////////////////////////////////////////
private static MailUtils instance; private MailUtils() {
} public static MailUtils getInstance() {
if (instance == null) {
instance = new MailUtils();
}
return instance;
} //单例模式//////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////// private static Session session;
private static String emailAddress;
private static String username;
private static String password; // 配置文件路径: src/mailConfig.properties
static {
try {
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.load(MailUtils.class.getClassLoader().getResourceAsStream("mailConfig.properties"));
emailAddress = props.getProperty("emailAddress");
username = emailAddress.split("\\@")[0];
password = props.getProperty("password");
session = Session.getInstance(props);
//session.setDebug(true);//启动调试,控制台打印交互信息
} catch (IOException e) {
e.printStackTrace();
}
} public boolean sendMail(MailInfo info) {
if (info == null) {
throw new RuntimeException("信息不全");
}
try {
Message message = createMail(info);
Transport transport = session.getTransport();
transport.connect(username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("发送成功");
return true;
} catch (Exception e) {
throw new RuntimeException(e);
}
} private Message createMail(MailInfo info) throws MessagingException, UnsupportedEncodingException {
if (info == null) {
return null;
}
//创建邮件
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailAddress));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(info.getTo()));
message.setSubject(info.getSubject()); MimeMultipart root = new MimeMultipart();
MimeMultipart contentImageMM = new MimeMultipart();
StringBuilder main = new StringBuilder(info.getContent()); //创建图片
List<String> imageUrlList = info.getImageUrlList();
if (imageUrlList != null && imageUrlList.size() > 0) {
for (String imageUrl : imageUrlList) {
String cid = generatorMD5(imageUrl); //id需要唯一,md5处理一把
MimeBodyPart image1 = new MimeBodyPart();
image1.setContentID(cid);
image1.setDataHandler(new DataHandler(new FileDataSource(imageUrl)));
main.append("<br/><img src='cid:").append(cid).append("'>");
contentImageMM.addBodyPart(image1);
}
} //描述数据之间的关系(正文和图片) 在封装到MimeBodyPart中去
MimeBodyPart content = new MimeBodyPart();
content.setContent(main.toString(), "text/html;charset=UTF-8");
contentImageMM.addBodyPart(content);
contentImageMM.setSubType("related");
MimeBodyPart contentImage = new MimeBodyPart();
contentImage.setContent(contentImageMM); //创建附件
List<String> attachmentUrlList = info.getAttachmentUrlList();
if (attachmentUrlList != null && attachmentUrlList.size() > 0) {
for (String attachmentUrl : attachmentUrlList) {
MimeBodyPart attachment1 = new MimeBodyPart();
DataHandler handler1 = new DataHandler(new FileDataSource(attachmentUrl));
attachment1.setDataHandler(handler1);
attachment1.setFileName(MimeUtility.encodeText(handler1.getName()));
root.addBodyPart(attachment1);
}
} //描述数据之间的关系(把正文和图片封装后的MimeBodyPart,再和附件封装)
root.addBodyPart(contentImage);
contentImageMM.setSubType("mixed"); //封装保存数据
message.setContent(root);
message.saveChanges();
return message;
} private String generatorMD5(String pwd) {
//用于加密的字符
char md5String[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
try {
//使用平台的默认字符集将此 String 编码为 byte序列,并将结果存储到一个新的 byte数组中
byte[] btInput = pwd.getBytes();
//信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
MessageDigest mdInst = MessageDigest.getInstance("MD5");
//MessageDigest对象通过使用 update方法处理数据, 使用指定的byte数组更新摘要
mdInst.update(btInput);
// 摘要更新之后,通过调用digest()执行哈希计算,获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) { // i = 0
byte byte0 = md[i]; //95
str[k++] = md5String[byte0 >>> 4 & 0xf]; // 5
str[k++] = md5String[byte0 & 0xf]; // F
}
//返回经过加密后的字符串
return new String(str);
} catch (Exception e) {
return null;
}
}
}

工具类

使用java mail 发送邮件的更多相关文章

  1. Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件

    文章目录 1. Spring Boot 集成 Java Mail 2. 单元测试 3. 源代码 Spring 对 Java Mail 有很好的支持.因此,Spring Boot 也提供了自动配置的支持 ...

  2. java mail(发送邮件--163邮箱)

    package com.util.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderIn ...

  3. java mail发送邮件

    最近做了自动发送邮件功能,带附件的:需要的jar包有

  4. 使用Java Mail发送邮件

    本笔记参考自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17839983 JavaMail是SUN提供给开发人员在应用程序中实现 ...

  5. 简单的java mail发送邮件实例

    mail.jar ,commons-email-X.X.jar ,activation.jar ,log4j.jar  这四个jar,放进项目里 下载地址 http://www.oracle.com/ ...

  6. 利用java mail发送邮件(转)

    JavaMail是SUN提供给开发者在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持经常使用的邮件协议,如SMTP.POP3.IMAP.开发者使用JavaMail编写邮件程序时,无需考 ...

  7. Java Mail 发送邮件(SSL加密方式,TSL加密方式)

    一.一般配置 发送邮件需要用到  mail包 maven 依赖如下: <!-- https://mvnrepository.com/artifact/javax.mail/mail --> ...

  8. Java mail 发送邮件 主题(标题)乱码

    最近开发遇到Javamail  发送邮件标题乱码问题,腾讯.网易邮箱不会乱码,阿里邮箱  标题则会乱码.解决办法: String subject = MimeUtility.encodeWord(ma ...

  9. 利用java mail发送邮件

    import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import java ...

随机推荐

  1. “菜”鸟理解.NET Framework(CLI,CLR,CTS,CLS,BCL,FCL)

    既然要学.NET,就要先认识认识她,我不喜欢大段大段文字的东西,自己通过理解,画个图,来看看.NET的沉鱼落雁,闭月羞花之容. 最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基 ...

  2. PostgreSQL JSON函数

    https://www.postgresql.org/docs/9.6/static/functions-json.html PostgreSQL 9.6.1 Documentation Prev U ...

  3. JavaScript:编程改变文本样式

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" Content=&q ...

  4. 移动端的传统click事件延迟和点透现象

    一.场景描述: 1.A/B两个层上下z轴重叠. 2.上层的A点击后消失或移开.(这一点很重要) 3.B元素本身有默认click事件(如a标签) 或 B绑定了click事件. 在以上情况下,点击A/B重 ...

  5. C#基础知识记录一

    C#基础知识记录一 static void Main(string[] args) { #region 合并运算符的使用(合并运算符??) 更多运算符请参考:https://msdn.microsof ...

  6. Java语言程序设计(基础篇) 第七章 一维数组

    第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...

  7. cmd导入导出

    2:用cmd进入命令行输入:tnsping cmstar就是测试172.18.13.200是否连接成功3:导入与导出,如下: 数据导出: 1 将数据库TEST完全导出,用户名system 密码mana ...

  8. Linux环境安装MySQL数据库

    1.  下载mysql安装包 下载地址1:  http://www.mysql.com/   (mysql官网) 下载地址2:  http://mirrors.sohu.com/mysql/   (其 ...

  9. rplidar测试

    以下在虚拟机中完成的(ubuntu12.04-amd64-ros-exbot-h2-140520). 进入catkin_ws,下载代码: cd ~/catkin_ws/src/ git clone h ...

  10. 分享一组矢量图标–UX图标字体库

    以下内容转自:http://ux.etao.com/,原文链接:http://ued.alimama.com/posts/219 科技日新月异的今天,市面上各种分辨率.各种显示精度的显示设备层出不穷, ...