关闭

Java 发送邮件

标签: javamailjavaspringapache
250人阅读 评论(0) 收藏 举报
分类:

1. JavaMail发送邮件

Properties props = new Properties();
// 基本的邮件会话
Session session = Session.getInstance(props);
// 启用调试模式
 session.setDebug(true);
// 构建一封邮件
Message msg = new MimeMessage(session);

// -----------------------构建邮件的核心四要素-----------------------------------
// 构建发送者地址
Address fromAddres = new InternetAddress("发送者邮件地址");
// 设置发送者邮箱地址
msg.setFrom(fromAddres);

// 设置接受邮箱地址[Message.RecipientType.TO 正常发送,Message.RecipientType.CC
// 抄送,Message.RecipientType.BCC 密送]
msg.setRecipient(Message.RecipientType.TO, new InternetAddress("接受邮件地址"));

// 构建邮件正文和主题
// 设置主题
msg.setSubject("【重要】JavaMail邮件测试");
// 设置内容
msg.setText("你好,javaMail邮件测试。");
// -----------------------构建邮件的核心四要素-----------------------------------

// 设置邮件有那台服务器发送
// 创建邮件传输者
Transport transport = session.getTransport("smtp");
// 连接服务器
transport.connect("smtp.sina.com", "发送邮件的邮件地址", "发送邮件的密码");

// 将邮件的正文添加到发送的服务器中
// 发送邮件
transport.sendMessage(msg, msg.getAllRecipients());

// 释放资源
transport.close();

注意:Jar包问题 [javax.mail.jar]


2. Apache Mail 发送邮件

2.1 发送简单邮件

// 创建简单邮件对象
SimpleEmail mail = new SimpleEmail();   
// 开启DeBug模式
mail.setDebug(true);
// 设置服务器地址
mail.setHostName("smtp.sina.com");
// 设置发送者邮箱地址及密码[认证发送邮件是否正确]
mail.setAuthentication("发送者邮箱", "发送者邮箱密码");
// 设置编码格式
mail.setCharset("UTF-8");
// 设置发送者
mail.setFrom("发送这邮箱地址");
// 接受邮箱帐号
mail.addTo("邮箱帐号");
// 设置主题
mail.setSubject("Apache Mail 自动发送的邮件");
// 设置正文
mail.setMsg("邮件自动发送,无需理会。。。");
// 发送
mail.send();
System.out.println("邮件发送完成...");

2.2 发送HTML邮件

//创建HTMl邮件对象
HtmlEmail mail = new HtmlEmail();

mail.setDebug(true);
mail.setHostName("smtp.sina.com");
mail.setAuthentication("帐号", "密码");
mail.setCharset("UTF-8");

mail.setFrom("发送者地址");
mail.addTo("接受地址");

//设置主题和正文
mail.setSubject("Apache HTML Mail");
mail.setHtmlMsg("<div style='color:red;font-size:36px'>这是一封html邮件<br/><a href='http://www.baidu.com' target='_blank'>百度</a></div>");

//发送
mail.send();

2.3 发送HTML邮件包含图片

HtmlEmail mail = new HtmlEmail();
mail.setDebug(true);
mail.setCharset("utf-8");
mail.setHostName("smtp.sina.com");
mail.setAuthentication(userName, password);

mail.setFrom("发送者邮箱地", "名称");
mail.addTo("接受者邮箱地址");

mail.setSubject("包含图片的HTML邮件2");

String filePath = mail.embed(new File("D:\\004  素材\\wKioL1XeaK6CmWwiAAAzWUvqCMY507.jpg"));
mail.setHtmlMsg("<div style='color:red;'>图片<br/><img src='cid:" + filePath + "' /></div>");

mail.send();

2.4 发送带附件的简单邮件

MultiPartEmail mail = new MultiPartEmail();
mail.setDebug(true);
mail.setCharset("utf-8");
mail.setHostName("smtp.sina.com");
mail.setAuthentication("帐号", "密码");

mail.setFrom("发送邮件地址");
mail.addTo("接受邮件地址");

mail.setSubject("包含附件的邮件");
mail.setMsg("正文,请看附件");

EmailAttachment achment = new EmailAttachment();
achment.setPath("D:\\004  素材\\201501051032.jpg");
// 字符串传入的是附件的名[包含后缀]
achment.setName(MimeUtility.encodeText("201501051032.jpg"));

mail.attach(achment);

mail.send();

2.5 发送带附件的HTML邮件

HtmlEmail mail = new HtmlEmail();
mail.setDebug(true);
mail.setCharset("utf-8");
mail.setHostName("smtp.sina.com");
mail.setAuthentication("帐号", "密码");

mail.setFrom("发送邮件地址");
mail.addTo("接受邮件地址");

mail.setSubject("HTML邮件及附件");
String cid = mail.embed(new File("D:\\004  素材\\wKioL1XeaK6CmWwiAAAzWUvqCMY507.jpg"));
mail.setHtmlMsg("<div style='color:red;'>图片<br/><img src='cid:" + cid + "' /></div>");

EmailAttachment achment = new EmailAttachment();
achment.setPath("D:\\004  素材\\u=2118649485,2729242940&fm=21&gp=0.jpg");
achment.setName(MimeUtility.encodeText("u=2118649485,2729242940&fm=21&gp=0.jpg"));

mail.attach(achment);
mail.send();

注意: 添加jar包[commons-email-1.4.jar]


3. Spring 发送邮件

3.1 介绍

  1. Spring的邮件发送的核心是MailSender接口,在Spring3.0中提供了一个实现类JavaMailSenderImpl,这个类是发送邮件的核心类。
  2. Spring提供的邮件发送不仅支持简单邮件的发送、添加附件,而且还可以使用velocity模板控制页面样式

3.2 Spring发送邮件步骤

  1. 添加jar包
  2. 创建JavaMailSenderImpl对象,并在构造方法中初始化(也可以使用IoC容器初始化)
private JavaMailSenderImpl mailSender;
public SpringMailSender() {
    // 初始化JavaMailSenderImpl,当然推荐在spring配置文件中配置
    mailSender = new JavaMailSenderImpl();
    // 设置参数
    mailSender.setHost("smtp.sina.com");
    mailSender.setUsername("发送邮件地址");
    mailSender.setPassword("发送邮件的登录密码");
}

3.3 发送一封简单邮件

/**
 * 简单邮件发送
 */
public void simpleSend() {
    SimpleMailMessage smm = new SimpleMailMessage();
    smm.setFrom(mailSender.getUsername());
    smm.setTo("接受这邮件地址");
    smm.setSubject(“Hello!");
    smm.setText("Hello你还好吗?");
    mailSender.send(smm);
}

3.4 发送一封HTML邮件

public void sendHtml() throws MessagingException {
    MimeMessage msg = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(msg, true,"utf-8");

    helper.setFrom(mailSender.getUsername());
    helper.setTo("接受邮件地址");
    helper.setSubject("Hello");
    // 第二个参数true,表示text的内容为html
    //然后注意<img/>标签,src='cid:file','cid'是contentId的缩写,'file'是一个标记,需要在后面的代码中调用MimeMessageHelper的addInline方法替代成文件
    helper.setText("<body><p style='color:red;'>Hello 你好吗?</p><img src='cid:file'/></body>", true);

    FileSystemResource file = new FileSystemResource("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg");   
    // src='cid:别名'   
    // helper.addInline("图片的别名", 图片资源对象);   
    helper.addInline("file", file);   

    mailSender.send(msg);
}

3.5 发送一封带附件的邮件

// 使用JavaMail的MimeMessage,支付更加复杂的邮件格式和内容
MimeMessage msg = mailSender.createMimeMessage();
    // 创建MimeMessageHelper对象,处理MimeMessage的辅助类
    MimeMessageHelper helper = new MimeMessageHelper(msg, true);
    // 使用辅助类MimeMessage设定参数
    helper.setFrom(mailSender.getUsername());
    helper.setTo("接受邮件地址");
    helper.setSubject"Hello!!!");
    helper.setText("邮件正文");

    // 加载文件资源,作为附件
    ClassPathResource file = new ClassPathResource("Chrysanthemum.jpg");
    // 加入附件
    helper.addAttachment(MimeUtility.encodeWord(file2.getFilename()), file);

    ClassPathResource file2 = new ClassPathResource("test.doc");
    helper.addAttachment(MimeUtility.encodeWord(file2.getFilename()), file2);

    // 发送邮件
    mailSender.send(msg);
}

==注意:== jar包问题

commons-logging-1.1.1.jar
log4j-1.2.17.jar
org.springframework.aop-3.1.1.RELEASE.jar
org.springframework.asm-3.1.1.RELEASE.jar
org.springframework.beans-3.1.1.RELEASE.jar
org.springframework.context-3.1.1.RELEASE.jar
org.springframework.context.support-3.1.1.RELEASE.jar
org.springframework.core-3.1.1.RELEASE.jar
org.springframework.expression-3.1.1.RELEASE.jar

附件:代码地址:http://git.oschina.net/hxxiaodao/JavaMail

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

@ 符号 在java中是什么语法 代表什么

java中@是什么     J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。     一点背景:J2SE 5.0 为 Java 语言增加...
  • skyboy11yk
  • skyboy11yk
  • 2013-10-12 16:49
  • 38773

关于java中<T>问题

关于java中问题 Jdk5.0新特性Generic Types (泛型) 原文 来源: 中国IT实验室 作者: 未知 责编: 宝良 1. 介绍 2.定义简单Java泛型 其实Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String...
  • zhengqiqiqinqin
  • zhengqiqiqinqin
  • 2013-05-31 19:22
  • 35831

Java中布尔类型操作&=,|=与^=的使用

今天在对同事的代码进行code review的时候,见到一个比较好玩的写法。“flag &= false;”,乍一看,还感觉他写错了,但是程序可以正常运行,赶紧去百度,看一下这个写法到底是怎么一回事,原来这个与平时常见的-=,+=等等是一样的,只不过平时用的比较少而已了,这个还真的是一个提升...
  • ziwen00
  • ziwen00
  • 2014-10-31 16:35
  • 17997

java中==与equel的区别

值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。     ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。  &...
  • hellokatewj
  • hellokatewj
  • 2014-03-26 17:43
  • 2840

java this 3种常见用法 详解

this 关键字 1.区分成员变量和局部变量 2.代表当前对象 3.构造器之间调用
  • u012176204
  • u012176204
  • 2017-01-17 09:41
  • 3100

【数据结构】之二叉树的java实现

二叉树的定义: 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。     二叉树(BinaryTree)是n(n≥0)个结点的有限集,...
  • wuwenxiang91322
  • wuwenxiang91322
  • 2013-10-02 09:28
  • 80337

Java可以做什么及可以给我们带来什么?

一般来说,Java是一个功能强大的软件平台。一套完整的Java平台将会给你带来如下特性: 开发工具箱:
  • stewen_001
  • stewen_001
  • 2014-03-12 16:06
  • 2905

Java 进度条控件的使用

利用JProcessBar类可以实现一个进度条,它本身不过是一个矩形控件,通过填充它的部分或全部来指示一个任务的执行情况,可以放置到一个新的线程中运行。 示例如下:
  • kehyuanyu
  • kehyuanyu
  • 2014-05-19 17:44
  • 8690

最小堆和最大堆的JAVA实现

/** * 文件名:BinaryHeap.java * 时间:2014年11月3日下午7:15:34 * 作者:修维康 */ package chapter6; import java.util.*; /** * 类名:BinaryHeap 说明:建立一个最小堆 */ class M...
  • xiuweikang
  • xiuweikang
  • 2014-11-04 16:37
  • 4438

java事务处理全解析

最近学习java事务,看到一位前辈的系列博客不错,转载过来作为记录 转载地址:http://www.davenkin.me/post/2013-02-16/40048284001    (一)Java事务处理的基本问题    (二)失败的案例 ...
  • huilangeliuxin
  • huilangeliuxin
  • 2015-02-03 10:26
  • 55435
    个人资料
    • 访问:2404次
    • 积分:175
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档