使用java mail 发送邮件
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 发送邮件的更多相关文章
- Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件
文章目录 1. Spring Boot 集成 Java Mail 2. 单元测试 3. 源代码 Spring 对 Java Mail 有很好的支持.因此,Spring Boot 也提供了自动配置的支持 ...
- java mail(发送邮件--163邮箱)
package com.util.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderIn ...
- java mail发送邮件
最近做了自动发送邮件功能,带附件的:需要的jar包有
- 使用Java Mail发送邮件
本笔记参考自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17839983 JavaMail是SUN提供给开发人员在应用程序中实现 ...
- 简单的java mail发送邮件实例
mail.jar ,commons-email-X.X.jar ,activation.jar ,log4j.jar 这四个jar,放进项目里 下载地址 http://www.oracle.com/ ...
- 利用java mail发送邮件(转)
JavaMail是SUN提供给开发者在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持经常使用的邮件协议,如SMTP.POP3.IMAP.开发者使用JavaMail编写邮件程序时,无需考 ...
- Java Mail 发送邮件(SSL加密方式,TSL加密方式)
一.一般配置 发送邮件需要用到 mail包 maven 依赖如下: <!-- https://mvnrepository.com/artifact/javax.mail/mail --> ...
- Java mail 发送邮件 主题(标题)乱码
最近开发遇到Javamail 发送邮件标题乱码问题,腾讯.网易邮箱不会乱码,阿里邮箱 标题则会乱码.解决办法: String subject = MimeUtility.encodeWord(ma ...
- 利用java mail发送邮件
import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import java ...
随机推荐
- Volley
Volley 是 Google 推出的轻量级 Android 异步网络请求框架和图片加载框架.在 Google I/O 2013 大会上发布.其适用场景是数据量小,通信频繁的网络操作. 主要特点: ( ...
- 使用 SVN Hook 实现服务器端代码自动更新
之前的做法是客户端提交代码之后,再去服务器端项目中 svn up 一下来更新代码,让服务器端的项目更新到最新版本.可以编写一个 post-commit 钩子脚本来实现服务器端代码的自动更新,它在 SV ...
- rabbitmq method之queue.declare
queue.declare即申请队列,首先对队列名作处理,若未指定队列名则随机生成一个,然后查询数据库队列是否已经创建,若创建完成则会申请队列返回 handle_method(#'queue.decl ...
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
本文为投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e ...
- django--forms
forms模块的功能 1 表单提交验证 2 生成HTML标签 其他 提交后保留页面数据 创建forms类 首先从django中引入forms,一般会在application中新建一个文件专门保存for ...
- iOS 面试题(五):weak 的内部实现原理 --转自唐巧
问题 weak 变量在引用计数为0时,会被自动设置成 nil,这个特性是如何实现的? 答案 在 Friday QA 上,有一期专门介绍 weak 的实现原理.https://mikeash.com/p ...
- 日志监控系统中,大批量查询mysql方案
最近开发遇到一个问题:需要查询一个大时间段内的数据,分1000个小段,即为1000个点.X轴是时间,Y轴是该小时间段内统计后数据.注意:数据返回是一个list,其中每个对象返回值都是该小时间段内数据统 ...
- Power-BI 预警触发的设定
在现实的业务场景,当某一区域的销售额低于一定的值时,那么就要引起重视了.我们希望当发生这种情况时,通过邮件或微信通知用户进行关注.Power-BI 预警触发功能就可以实现这个功能.一.设定公共参数1. ...
- android.graphic.Path
类path是一个封装的几何学路径包括直线,二次曲线,三次曲线.它可以通过函数canvas.drawPath(path, paint)画出来,可以通过填充方式或者画线方式(由paint的style决定) ...
- Nginx location 匹配顺序整理
Nginx location模块整理 具体的Nginx安装就不在这里描述了,这里只是为了对location的描述 Nginx环境 a. 查看当前系统cat /etc/redhat-release [r ...