1. 电子邮件协议

  电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。
  其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

2. JavaMail

  Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,可以去 Java 或 Oracle 官网下载。

  下载地址:
  https://java.net/projects/javamail/pages/Home 或者 http://www.oracle.com/technetwork/java/javamail/index.html

  我自己使用的jar包下载地址

三、发送邮件的前提
  发送邮件首先需要有一个邮箱账号和密码(如果设置了客户端授权密码,此处的密码为客户端授权密码),并且邮箱账号必须要开启 SMTP 服务。
  以163邮箱为例,在浏览器网页登录邮箱后一般在邮箱的“设置”选项中可以开启,并记下邮箱的 SMTP 服务器地址,:
    
四. 创建并发送电子邮件

  邮件创建步骤:

    创建一个邮件对象(MimeMessage);
    设置发件人,收件人,可选增加多个收件人,抄送人,密送人;
    设置邮件的主题(标题);
    设置邮件的正文(内容,附件);
    设置显示的发送时间;
    保存到本地。

 import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
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 org.apache.commons.lang.StringUtils; public class SendEmailUtil {
/**
* 发送邮件的方法
*
* @param serverAddress
* 服务器地址
* @param user
* 服务器用户名
* @param pwd
* 服务器密码
* @param from
* 发送人
* @param subject
* 标题
* @param emailReceiver
* 接收人
* @param htmlContents
* 发送内容
* @param ucode
* 编码格式
* @param fileName
* 附件名称
* @throws java.lang.Exception
*/
public boolean sendEmail(String serverAddress, String user, String pwd,
String from, String subject, List emailReceiver,
String htmlContents, String ucode, String fileName) {
boolean flag = false;
htmlContents = htmlContents+ "       (此邮件为自动发送,请勿回复)";
try {
// 创建Properties对象
Properties props = System.getProperties();
// 创建信件服务器
props.put("mail.smtp.auth", "true");
// 得到默认的对话对象
Session session = Session.getDefaultInstance(props, null);
// 创建一个消息,并初始化该消息的各项元素
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
// 编码方式
if (ucode.indexOf("GBK") != -1) {
String tempFrom = new String(from.getBytes("GBK"), "UTF-8");
message.setFrom(new InternetAddress(tempFrom));
}
// 准备收件人地址
InternetAddress[] address = new InternetAddress[emailReceiver.size()];
for (int i = 0; i < address.length; i++) {
address[i] = new InternetAddress((String) emailReceiver.get(i));
}
System.out.println(address[0]);
message.setRecipients(Message.RecipientType.TO, address);
/*// Cc: 抄送(可选)
message.setRecipient(MimeMessage.RecipientType.CC,
new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
// Bcc: 密送(可选)
message.setRecipient(MimeMessage.RecipientType.BCC,
new InternetAddress("ff@receive.com", "USER_FF", "UTF-8"));*/ // 邮件主题
message.setSubject(subject);
System.out.println(message.getSubject());
// 设置内容
BodyPart bp = new MimeBodyPart();
bp.setContent(htmlContents, ucode);
// 后面的BodyPart将加入到此处创建的Multipart中
Multipart mp = new MimeMultipart();
mp.addBodyPart(bp);
// 保存附件
addFileAffix(mp, fileName);
// Multipart加入到信件
message.setContent(mp);
System.out.println(message.getContent());
// 设置信件头的发送日期
message.setSentDate(new Date());
System.out.println(message.getSentDate());
//保存对message设置
message.saveChanges(); //保存邮件到本地
OutputStream out = new FileOutputStream("MyEmail.eml");
message.writeTo(out);
out.flush();
out.close();
// 发送信件
Transport trans = session.getTransport("smtp");
trans.connect(serverAddress, user, pwd);
trans.sendMessage(message, message.getAllRecipients());
trans.close();
flag = true;
} catch (Exception e) {
System.out.println("error:邮件服务器连接错误!");
e.printStackTrace();
} finally {
// 删除临时文件
if (StringUtils.isNotBlank(fileName)){}
deleteFile(fileName);
}
return flag;
} /**
* 发送附件
*
* @param mp
* 邮件信息
* @param fileName
* 附件全路径(包括文件名称)
* @return
*/
public boolean addFileAffix(Multipart mp, String fileName) {
try {
String newName = "";
newName = fileName.substring(fileName.lastIndexOf(File.separator) + 1,
fileName.length());
if (StringUtils.isEmpty(fileName))
return false;
BodyPart bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(fileName); bp.setDataHandler(new DataHandler(fileds));
// bp.setFileName("=?GBK?B?"+ enc.encode(fileName.getBytes()) + "?=");
bp.setFileName(newName);
mp.addBodyPart(bp); return true; } catch (Exception e) { return false; }
} /**
* 删除文件
*
* @param fileName
*/
public void deleteFile(String fileName) {
if (StringUtils.isEmpty(fileName))
return;
File file = new File(fileName);
if (file.isFile()) {
file.delete();
}
} public static void main(String[] args) {
SendEmailUtil sendEmail = new SendEmailUtil();
List receiverList = new ArrayList<String>();
receiverList.add("yyy@qq.com");
receiverList.add("zzz@qq.com");
sendEmail.sendEmail("smtp.163.com", "xxx@163.com", "xxx", "xxx@163.com", "测试邮件",
receiverList, "这是一封测试邮件", "GBK", "C:/222.rar");
}
}

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

  1. web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  2. web应用中使用JavaMail发送邮件 。。转载

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  3. (转载)JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件 ...

  4. JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  5. java中使用javaMail工具类发送邮件

    1.引入依赖 <!--javaMail--> <dependency> <groupId>javax.mail</groupId> <artifa ...

  6. Web应用中使用JavaMail发送邮件进行用户注册

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  7. JAVAEE——BOS物流项目13:Quartz概述、创建定时任务、使用JavaMail发送邮件、HighCharts概述、实现区域分区分布图

    1 学习计划 1.Quartz概述 n Quartz介绍和下载 n 入门案例 n Quartz执行流程 n cron表达式 2.在BOS项目中使用Quartz创建定时任务 3.在BOS项目中使用Jav ...

  8. 【SSH网上商城项目实战25】使用java email给用户发送邮件

       转自: https://blog.csdn.net/eson_15/article/details/51475046 当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息, ...

  9. 替换excel模板中的内容并使用JavaMail发送邮件

    由于在公司工作,常年出差,每天都要以日报的形式向公司汇报当天的工作内容.而日报的内容大体上就只有当天工作的主要内容时变化的,其余的都是不变 的. 而我的电脑刚打开excel有点卡,因此决定使用Java ...

随机推荐

  1. 白板编程浅谈——Why, What, How

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://lucida.me/blog/whiteboard-coding-demystified/ 这篇文章节选 ...

  2. 作为Coder的利器记载

    工作近三年,使用PC快六年,拥抱Mac整一年,投具器石榴裙三年.14年第一次被同事推荐Everything,开启了JeffJade对工具的折腾之旅,并乐此不疲.时去两年,这必然是消耗了一些时间,但对效 ...

  3. oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库

    最近由于系统重装,在还原dmp备份文件时,由于数据原因(用exp命令导出时表没有导出全部),导致系统不能正常运行.根据网上的信息和个人实际情况,做个记录,便于后用. oracle 导出空表方法: 1. ...

  4. DBUtil数据库连接单例 —— 简单不简单

    单例大概是我最早产生明确模式意识的设计模式,因为它足够简单粗暴,目的足够明确. 单例么,就是不管怎么访问,都返回一个单一实例就好了,我最早应用在数据库的DBUtil中. public class DB ...

  5. 你真的会玩SQL吗?透视转换的艺术

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  6. C#--图片上传(PC端和APP)保存及 跨域上传说明

    手动跨域操作文件 补录:跨域访问文件夹文件是一种常见的需求,下面主要介绍的的通过代码使用具有权限账号的人来达到跨域操作文件的能力. 现在补充一下普通的一些需求场景,今天就遇到了一种需要经常需要登录远程 ...

  7. 对 Serializable和Parcelable理解

    1.首先他们两个接口都是为了实现对象的序列化,使之可以传递,所谓序列化就是将对象信息装换成可以存储的介质的过程. 2.Serializable是jdk所提供的序列化接口,该接口存在于io包下,可想用于 ...

  8. Linux Cmd Tool 系列之—alias

    The alias cmd list your current aliases. For example : alias Use alias to shorten a long cmd in curr ...

  9. PHP数组的基础知识

  10. 微信小程序注册

    小程序是一种新的开放能力,可以在微信内被便捷地获取和传播,同时具有出色的使用体验.开发者可以根据平台提供的能力,快速地开发一个小程序. 开放内容包括: 1.开放注册范围:企业.政府.媒体.其他组织: ...