Java-JavaMail邮件开发(1)Java Mail
1、仅使用Java Mail
使用163邮箱作为代理服务器:
引入依赖:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
config.properties
host=smtp.163.com
from=xxxxxxxxxx@163.com
to=xxxxxxxxxxx@qq.com
affix=src/main/java/a.png
affixName=a.png
user=xxxxxxxxxx
pwd=xxxxxxxxxxx #授权码
subject=\u6D4B\u8BD5\u53D1\u9001\u90AE\u4EF6
SendMailUtil.java
package com.lfy.cn.JExcelApiTest; import java.io.IOException;
import java.util.Properties; import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*; public class SendMailUtil { static String HOST = ""; // smtp服务器
static String FROM = ""; // 发件人地址
static String TO = ""; // 收件人地址
static String AFFIX = ""; // 附件地址
static String AFFIXNAME = ""; // 附件名称
static String USER = ""; // 用户名
static String PWD = ""; // 163的授权码
static String SUBJECT = ""; // 邮件标题
static String[] TOS = null; static {
try {
Properties props = new Properties();
props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));//从自定义配置文件获取相关参数
HOST=props.getProperty("host");
FROM=props.getProperty("from");
TO=props.getProperty("to");
TOS=TO.split(",");
AFFIX=props.getProperty("affix");
AFFIXNAME=props.getProperty("affixName");
USER=props.getProperty("user");
PWD=props.getProperty("pwd");
SUBJECT=props.getProperty("subject");
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 发送邮件
* @param host
* @param user
* @param pwd
*/
public static void send(String context) {
Properties props = new Properties();
props.put("mail.smtp.host", HOST);//设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
props.put("mail.smtp.auth", "true"); //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
Session session = Session.getDefaultInstance(props);//用props对象构建一个session
session.setDebug(true);
MimeMessage message = new MimeMessage(session);//用session为参数定义消息对象
try {
message.setFrom(new InternetAddress(FROM));// 加载发件人地址
InternetAddress[] sendTo = new InternetAddress[TOS.length]; // 加载收件人地址
for (int i = 0; i < TOS.length; i++) {
sendTo[i] = new InternetAddress(TOS[i]);
}
message.addRecipients(Message.RecipientType.TO,sendTo);
message.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(FROM));//设置在发送给收信人之前给自己(发送方)抄送一份,不然会被当成垃圾邮件,报554错
message.setSubject(SUBJECT);//加载标题
Multipart multipart = new MimeMultipart();//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
BodyPart contentPart = new MimeBodyPart();//设置邮件的文本内容
contentPart.setText(context);
multipart.addBodyPart(contentPart);
if(!AFFIX.isEmpty()){//添加附件
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(AFFIX);
messageBodyPart.setDataHandler(new DataHandler(source));//添加附件的内容
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();//添加附件的标题
messageBodyPart.setFileName("=?GBK?B?"+ enc.encode(AFFIXNAME.getBytes()) + "?=");
multipart.addBodyPart(messageBodyPart);
}
message.setContent(multipart);//将multipart对象放到message中
message.saveChanges(); //保存邮件
Transport transport = session.getTransport("smtp");//发送邮件
transport.connect(HOST, USER, PWD);//连接服务器的邮箱
transport.sendMessage(message, message.getAllRecipients());//把邮件发送出去
transport.close();//关闭连接
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
send("内容");
}
}
运行效果:

2、总结
邮件发送分为四步:创建邮件发送器、编写邮件内容、书写邮件往来地址、发送邮件。
spring提供了JavaMailSenderImpl对Java Mail的支持,JavaMailSenderImpl继承自javaMailSender。
JavaMailSenderImpl支持MimeMessages和SimpleMailMessages:
MimeMessages为复杂邮件模板,支持文本、附件、html、图片等。
SimpleMailMessages实现了MimeMessageHelper,为普通邮件模板,支持文本。
Java-JavaMail邮件开发(1)Java Mail的更多相关文章
- 19、文件上传与下载/JavaMail邮件开发
回顾: 一. 监听器 生命周期监听器 ServletRequestListener HttpSessionListener ServletContextListener 属性监听器 ServletRe ...
- Java网络多线程开发:java.io.EOFException
Java网络多线程开发:java.io.EOFException 在实现韩顺平Java的多用户即使通信系统实战项目中: 对于客户端线程的停止,老韩是向服务器端发送一个消息对象,提示服务器端进行资源释放 ...
- JavaMail 邮件开发
(api + 配置) 开发中,邮件的应用? -à 注册,填写生日: 后期系统会自动发送生日祝贺 -à 发货,发货提醒!邮件提醒! 邮件: 1. 发邮件:[程序中如何发邮件!] 2. 收邮件:[ ...
- Java-Mail邮件开发
Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务. 几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要搞清楚电子邮件是如何在互 ...
- JavaMail邮件开发
一.只带有纯文本的邮件 代码事例如下: package com.lyh.sendemail; import java.util.Properties; import javax.mail.Messag ...
- 夯实Java基础系列1:Java面向对象三大特性(基础篇)
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 [https://github.com/h2pl/Java-Tutorial](https: ...
- 夯实Java基础系列5:Java文件和Java包结构
目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...
- 夯实Java基础系列15:Java注解简介和最佳实践
Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...
- 我最推荐的一张Java后端学习路线图,Java工程师必备
前言 学习路线图往往是学习一样技术的入门指南.网上搜到的Java学习路线图也是一抓一大把. 今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点.所谓不求最好,但求最全,学习Java后端的同学 ...
- Java - Java Mail邮件开发(2)springboot +Java Mail + Html
1.springboot + Java Mail + Html 项目结构: pom.xml <project xmlns="http://maven.apache.org/POM/4. ...
随机推荐
- java:序列化Serializable 接口
java:序列化Serializable 接口 public class SerializePerson implements Serializable { private String name; ...
- SQL Server参数优化
内存参数: 此处为512G物理内存,一般来说设置为物理内存80%左右,设置过大资源不会自动释放,内存可能会持续增长:设置过小资源浪费. CPU参数: 最大工作线程数: 此处为4个CPU40核,调整后物 ...
- ckeditor直接粘贴图片实现
自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...
- PHPExcel组件编程spl_autoload_register
E:\html\tproject\framework\modules\common\vendor\PHPExcel\Classes\PHPExcel.php <?php /** PHPExcel ...
- 如何理解重载与重写——Overload vs Override/Overwrite
重载: 在同一个类中,拥有类似功能的同名方法之间的关系叫做重载. 重载的条件:1.具有相同方法名和类似功能: 2.参数的类型或者个数不同: 3.与返回值无关: 重写: 在子父类的继承关系中,子类继承父 ...
- 大数据笔记(六)——HDFS的底层原理:JAVA动态代理和RPC
一.Java的动态代理对象 实现代码如下: 1.接口类MyService package hdfs.proxy; public interface MyService { public void me ...
- Java语言支持的变量类型有哪几种
Java语言支持的变量类型有: 类变量:独立于方法之外的变量,用 static 修饰. 实例变量:独立于方法之外的变量,不过没有 static 修饰. 局部变量:类的方法中的变量. 实例: publi ...
- os.environ.get()的用法
os.environ.get()是python中os模块获取环境变量的一个方法 import os JS_ADDRESS = os.environ.get("PALM_JS_ADDRESS& ...
- uva live 7638 Number of Connected Components (并查集)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- Understanding RequireJS for Effective JavaScript Module Loading
Modular programming is used to break large applications into smaller blocks of manageable code. Modu ...