java mail邮件发送(带附件) 支持SSL
java mail邮件发送(带附件)有三个类
MailSenderInfo.java
package mail; import java.util.Properties;
import java.util.Vector;
public class MailSenderInfo {
// 发送邮件的server的IP和端口
private String mailServerHost;
private String mailServerPort = "25";
// 邮件发送者的地址
private String fromAddress;
// 邮件接收者的地址
private String toAddress;
// 登陆邮件发送server的username与password
private String userName;
private String password;
// 是否须要身份验证
private boolean validate = false;
// 是否启用ssl
private boolean validateSSL = false;
// 邮件主题
private String subject;
// 邮件的文本内容
private String content;
// 邮件附件的文件名称
private Vector attachFileNames;
/**
* 获得邮件会话属性
*/
public Properties getProperties(){
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
}
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
} public Vector getAttachFileNames() {
return attachFileNames;
}
public void setAttachFileNames(Vector attachFileNames) {
this.attachFileNames = attachFileNames;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String textContent) {
this.content = textContent;
}
public boolean isValidateSSL() {
return validateSSL;
}
public void setValidateSSL(boolean validateSSL) {
this.validateSSL = validateSSL;
}
}
MailAuthenticator.java
package mail; import javax.mail.*; public class MailAuthenticator extends Authenticator { private String userName;
private String password; public MailAuthenticator() {
} public MailAuthenticator(String username, String password) {
this.userName = username;
this.password = password;
} protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}
SimpleMailSender.java
package mail; import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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 SimpleMailSender { /**
* 以html发送邮件(带附件)
*
* @param mailInfo
* 待发送的邮件的信息
*/
public boolean sendHtmlAndAffixMail(MailSenderInfo mailInfo) {
// 推断是否须要身份认证
MailAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if(mailInfo.isValidateSSL()){
pro.put("mail.smtp.starttls.enable","true");
pro.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
}
// 假设须要身份认证,则创建一个password验证器
if (mailInfo.isValidate()) {
authenticator = new MailAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
}
// 依据邮件会话属性和password验证器构造一个发送邮件的session
Session session = Session.getDefaultInstance(pro, authenticator);
try {
MimeMessage msg = new MimeMessage(session); // 构造MimeMessage 并设定主要的值
// MimeMessage msg = new MimeMessage();
msg.setFrom(new InternetAddress(mailInfo.getFromAddress()));
// msg.addRecipients(Message.RecipientType.TO, address);
// //这个仅仅能是给一个人发送email
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailInfo.getToAddress()));
msg.setSubject(MimeUtility.encodeText(mailInfo.getSubject()));
Multipart mp = new MimeMultipart();// 构造Multipart
MimeBodyPart mbpContent = new MimeBodyPart();// 向Multipart加入正文
mbpContent.setContent(mailInfo.getContent(),
"text/html;charset=GB2312");
mp.addBodyPart(mbpContent);// 向MimeMessage加入(Multipart代表正文)
Vector file = mailInfo.getAttachFileNames();
Enumeration efile = file.elements();// 向Multipart加入附件
while (efile.hasMoreElements()) {
MimeBodyPart mbpFile = new MimeBodyPart();
String filename = efile.nextElement().toString();
System.out.println(filename.toLowerCase());
FileDataSource fds = new FileDataSource(filename);
mbpFile.setDataHandler(new DataHandler(fds));
System.out.println(fds.getName());
mbpFile.setFileName(MimeUtility.encodeText(fds.getName()));
// 向MimeMessage加入(Multipart代表附件)
mp.addBodyPart(mbpFile);
}
file.removeAllElements();
// 向Multipart加入MimeMessage
msg.setContent(mp);
msg.setSentDate(new Date());
msg.saveChanges();
// 发送邮件
Transport transport = session.getTransport("smtp");
transport.connect(mailInfo.getMailServerHost(), mailInfo
.getUserName(), mailInfo.getPassword());
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
} catch (Exception mex) {
mex.printStackTrace();
return false;
}
return true; } }
測试类
package mail; import java.util.Vector; public class MailTest { /**
* @param args
*/
public static void main(String[] args) {
//这个类主要是设置邮件
MailSenderInfo mailInfo = new MailSenderInfo();
mailInfo.setMailServerHost(host);
mailInfo.setMailServerPort("465");
mailInfo.setValidate(true);
mailInfo.setValidateSSL(true);
mailInfo.setUserName("username");
mailInfo.setPassword("pwd");//您的邮箱password
mailInfo.setFromAddress("address");
mailInfo.setToAddress("XXXXX@sina.cn");
mailInfo.setSubject("设置邮箱标题");
mailInfo.setContent("今天应该是魅族粉的狂欢日!"+
"今天魅族在北京正式公布MX4,魅族MX4採用5.36寸1920×1152分辨率屏幕(PPI418),搭载联发科八核处理器,提供2070万像素摄像头,配备3100mAh电池,执行全新的Flyme 4.0系统,支持移动与联通网络双4G,安兔兔跑分46124分,提供深灰色、纯白色及土豪金版本号,16G版售价1799元,32G版售价1999元。");
//这个类主要来发送邮件
Vector fileNames = new Vector();
fileNames.add("D:\\delete\\周报表20140903103213.xls");
fileNames.add("D:\\delete\\复件 周报表20140903103213.xls");
fileNames.add("D:\\delete\\复件 (2) 周报表20140903103213.xls");
mailInfo.setAttachFileNames(fileNames);
SimpleMailSender sms = new SimpleMailSender();
// sms.sendTextMail(mailInfo);//发送文体格式
sms.sendHtmlAndAffixMail(mailInfo);//发送html格式
} }
java mail邮件发送(带附件) 支持SSL的更多相关文章
- System.Net.Mail邮件发送抄送附件(多个)
/// <summary> /// 邮件发送抄送附件 /// </summary> /// <param name="mailTo">收件人(可 ...
- 161013、java实现邮件群发带附件
要完成Java群发邮件功能,首先须加入mail.jar和activation.jar这两个包 下面是邮件的例子: import java.io.File; import java.util.Prope ...
- Java Mail 邮件发送简单封装
上一篇文章我们用写了一个Java Mail 的Demo,相信你已经可以用那个例子来发送邮件了.但是Demo 有很多的问题. 首先每次发送需要配置的东西很多,包括发件人的邮箱和密码.smtp服务器和SM ...
- Java Mail邮件发送的简单实现
1.什么是java mail JAVA MAIL是利用现有的邮件账户发送邮件的工具,通过JAVA Mail的操控,让程序自动的使用设置的邮箱发送邮件. 这一机制被广泛的用在注册激活和垃圾邮件的发送等方 ...
- Spring的javaMail邮件发送(带附件)
项目中经常用到邮件功能,在这里简单的做一下笔记,方便日后温习. 首先需要在配置文件jdbc.properties添加: #------------ Mail ------------ mail.smt ...
- Java Mail 邮件发送Demo
上周公司的项目要求开发邮件发送功能.自己在网上跟着教程边学边做了一下午,现在基本开发完成了.由于一个同事也想看下该怎么写,顺便学习下.所以我就写成了一遍教程,顺便巩固下邮件发送里面的内容. Demo ...
- UiPath: Send SMTP Mail Message 发送带附件的邮件
Tips:关于Hotmail的server和port的获取方式,请参考以下链接 https://support.office.com/en-us/article/Server-settings-you ...
- [PHP]使用PHPMailer发送带附件并支持HTML内容的邮件
来源:http://www.helloweba.com/view-blog-205.html PHPMailer是一个封装好的PHP邮件发送类,支持发送HTML内容的电子邮件,以及可以添加附件发送,并 ...
- java发送带附件的邮件
/** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...
随机推荐
- 【Java并发编程实战】—–synchronized
在我们的实际应用其中可能常常会遇到这样一个场景:多个线程读或者.写相同的数据,訪问相同的文件等等.对于这样的情况假设我们不加以控制,是非常easy导致错误的. 在java中,为了解决问题,引入临界区概 ...
- 15.Linux的文件结构
linux的文件结构和windows不同,没有分区,是树形的结构: /etc:存放配置文件 /lib:编译程序需要的函数库 /usr:包含所有其他内容,比如内核在/usr/src中,/usr/bin存 ...
- Tomcat 初探(二) server.xml 配置
前言 在上一篇文章中,我们在示例中演示了网站的发布,其中涉及到了 server.xml 的修改,本文中我会给大家详细解释一下 server.xml 文件中的节点及其属性的作用,本片文章参考并摘抄了他人 ...
- ROS-SLAM仿真-hector
前言:hector_slam可以很好的在空中机器人,手持构图设备及特种机器人中运行. hector_slam不需要订阅里程计信息/odmo消息,而是直接使用激光估算里程计信息,因此,当机器人速度较快时 ...
- POJ 1128 Frame Stacking 拓扑排序+暴搜
这道题输出特别坑.... 题目的意思也不太好理解.. 就解释一下输出吧.. 它让你 从下往上输出. 如果有多种情况,按照字典序从小往大输出... 就是这个多种情况是怎么产生的呢. 下面给一组样例. 很 ...
- inotify-tools+rsync实时同步文件安装和配置
服务器A:论坛的主服务器,运行DZ X2论坛程序;服务器B:论坛从服务器,需要把X2的图片附件和MySQL数据实时从A主服务器实时同步到B服务器.MySQL同步设置会在下一编中说到.以下是用于实时同步 ...
- 判断是否是Ajax请求
Request.IsAjaxRequest()判断是否是ajax请求原理:Http协议上有个X-Requested-With:XML HttpRequest属性判断的 mvc后台通过Request可以 ...
- JavaScript DOM编程艺术(第2版)学习笔记1(1~4章)
第一章 一些基本概念 HTML(超文本标记语言),构建网页的静态结构,由一系列的DOM组成: CSS(层叠样式表),给网页各部分结构添加样式: JavaScript,通过获取DOM给静态结构加上动作, ...
- 从EntityFramework转换EntityFrameworkCore的正确姿势(DBFirst)
今天有一个小任务:要把一个数据的数据搬运到另一个数据库(两个数据库的数据结构很不一样). 决定用.net core console app来跑,并且采用entityframework 去做数据CRU ...
- java ScriptEngine 使用 (java运行脚本文件)
转自:http://www.tuicool.com/articles/imEbQbA Java SE 6最引人注目的新功能之一就是内嵌了脚本支持.在默认情况下,Java SE 6只支持JavaScri ...