《Java知识应用》Java发送邮件(QQ,163)
1 准备
Jar包下载地址:
链接: https://pan.baidu.com/s/1kFZgWRR8yZaQH_baf6tzAg 提取码: x2e8
邮箱:授权码
2.案例:
通过QQ邮箱服务器
import javax.activation.DataHandler;
import javax.activation.DataSource;
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 java.util.Properties; public class SendQQMailUtil { static String FROM = ""; // 发件人地址
static String AFFIX = ""; // 附件地址
static String AFFIXNAME = ""; // 附件名称
static String USER = ""; // 用户名
static String PWD = ""; // QQ的授权码
static String SUBJECT = ""; // 邮件标题
static String[] TOS = new String[]{""}; // 收件人地址
static String context = ""; //邮件正文 public static void main(String[] args) {
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");// 连接协议
properties.put("mail.smtp.host", "smtp.qq.com");// 主机名
properties.put("mail.smtp.port", 465);// 端口号
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用
properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
// 得到回话对象
Session session = Session.getInstance(properties);
// 获取邮件对象
Message message = new MimeMessage(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.setRecipients(Message.RecipientType.TO, sendTo);
// 设置邮件标题
message.setSubject(SUBJECT); Multipart multipart = new MimeMultipart();//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
// 设置邮件内容
BodyPart contentPart = new MimeBodyPart();//设置邮件的文本内容
contentPart.setText(context);
multipart.addBodyPart(contentPart);
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中 // 得到邮箱对象
Transport transport = session.getTransport();
// 连接自己的邮箱账户
transport.connect(USER, PWD);// 密码为QQ邮箱开通的stmp服务后得到的客户端授权码 // 发送邮件
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
通过163邮箱服务器
import javax.activation.DataHandler;
import javax.activation.DataSource;
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 java.util.Properties; public class Send163MailUtil {
static String FROM = ""; // 发件人地址
static String AFFIX = ""; // 附件地址
static String AFFIXNAME = ""; // 附件名称
static String USER = ""; // 用户名
static String PWD = ""; // 163的授权码
static String SUBJECT = ""; // 邮件标题
static String[] TOS = new String[]{""}; // 收件人地址
static String context = ""; //邮件正文 public static void main(String[] args) {
Properties props = new Properties(); //smtp服务器
props.put("mail.smtp.host", "smtp.163.com");//设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
props.put("mail.smtp.auth", "true"); //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
props.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用
props.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
props.put("mail.smtp.port", 465);// 端口号 Session session = Session.getDefaultInstance(props);//用props对象构建一个session
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(USER, PWD);//连接服务器的邮箱
transport.sendMessage(message, message.getAllRecipients());//把邮件发送出去
transport.close();//关闭连接
} catch (Exception e) {
e.printStackTrace();
}
}
}
公司自身邮箱服务器
import javax.activation.DataHandler;
import javax.activation.DataSource;
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 java.util.Properties; public class MailUtil { static String FROM = ""; // 发件人地址
static String AFFIX = ""; // 附件地址
static String AFFIXNAME = ""; // 附件名称
static String USER = ""; // 用户名
static String PWD = ""; // 密码
static String SUBJECT = ""; // 邮件标题
static String[] TOS = new String[]{""}; // 收件人地址
static String context = ""; //邮件正文 public static void main(String[] args) {
Properties props = new Properties(); //smtp服务器
props.put("mail.smtp.host", "");//设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
props.put("mail.smtp.auth", "true"); //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
props.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息 Session session = Session.getDefaultInstance(props);//用props对象构建一个session
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(USER, PWD);//连接服务器的邮箱
transport.sendMessage(message, message.getAllRecipients());//把邮件发送出去
transport.close();//关闭连接
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试邮箱是否可以正常发送:
参考:
https://www.cnblogs.com/moris5013/p/9729422.html
https://www.cnblogs.com/xmqa/p/8458300.html
《Java知识应用》Java发送邮件(QQ,163)的更多相关文章
- Java知识体系
Java知识体系 java知识结构.jpg web框架.jpg 计算机课程体系.png 2016-08-19_090929.png 流行的哈希算法生存状况.jpg "JAVA之父" ...
- 基于java mail实现简单的QQ邮箱发送邮件
刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...
- 【SSH网上商城项目实战25】使用java email给用户发送邮件
转自: https://blog.csdn.net/eson_15/article/details/51475046 当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息, ...
- java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板
java 利用spring JavaMailSenderImpl发送邮件,支持普通文本.附件.html.velocity模板 博客分类: Java Spring 本文主要介绍利用JavaMailS ...
- Java知识总结
...
- Java开发知识之Java的异常处理
Java开发知识之Java的异常处理 一丶异常概述 在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段. 比如我们的QQ.有的时候就崩溃了.比如出现xx ...
- Java 学习(18):Java 序列化& 网络编程& 发送邮件
--Java 序列化 -- 网络编程 -- 发送邮件 Java 序列化 Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据.有关对象的类型的信 ...
- 2016年6月20日 JAVA知识框架
基于 J2EE 列举的知识架构,大体列举开发基础知识.帮助我随时查缺补漏,奉行好记性不如烂笔头.写了这该随笔,以便后续查询. 1 JAVA简介 2 JAVA编程环境 3 JAVA基本编程结构 4 ...
- [Java面试二]Java基础知识精华部分.
一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...
- Java企业微信开发_11_异常:java.net.UnknownHostException: qyapi.weixin.qq.com
原因: 网络原因导致 dns解析失败. 解决方案: 方案一 : 1.查看你的服务器能否ping通外网,不过不行说明你的网络出了问题. (我的情况是客户的应用服务器只能内网访问,所以是网络出问题 ...
随机推荐
- ansible start canal
- name: Start canal server shell: source /etc/profile && nohup /opt/canal/bin/startup.sh
- LXC容器文件系统设计优化
在HOST上面,一个LXC container包含一个config文件和一个rootfs目录. 早期我们在交叉编译系统上编译出container的rootfs之后,直接在编译系统上将其用tar压缩打包 ...
- Acquistion Location Confidence for accurate object detection
Acquistion Location Confidence for accurate object detection 本论文主要是解决一下两个问题: 1.分类得分高的预测框与IOU不匹配,(我猜应 ...
- 新闻实时分析系统 Spark2.X环境准备、编译部署及运行
1.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面, Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理 ...
- 基于loghub的消息消费延迟监控
我们可以把loghub当作一个消息中间件来使用.如果能知道当前的消费进度,自然好了,否则消费情况一无所知,总是有点慌! loghub消费分两种情况,一是普通消费,二是消费组消费: 消费组消费,logh ...
- sql语句执行步骤详解
目录 一.准备工作 二.SQL逻辑查询语句执行顺序 三.SQL书写习惯 一.准备工作 先来一段伪代码,首先你能看懂么? SELECT DISTINCT <select_list> FROM ...
- ganglia 服务端
#!/bin/bash #配置参数 serverIP=192.168.1.16 network=ens32 #关闭selinux setenforce sed -i 's/SELINUX=enforc ...
- Flask入门学习——自定义一个url转换器
我们知道,flask的url规则是可以添加变量部分的,这个参数变量是写在尖括号里的,比如:/item/<id>/,如果需要指出参数的类型要符合<converter:vai ...
- 【RN - 基础】之TextInput使用简介
TextInput组件允许用户在应用中通过键盘输入文本信息,其使用方法和Text.Image一样简单,实例代码如下: <TextInput placeholder={'请输入用户名'} styl ...
- 线程锁&信号量&gil
线程锁 线程锁的主要目的是防止多个线程之间出现同时抢同一个数据,这会造成数据的流失.线程锁的作用类似于进程锁,都是为了数据的安全性 下面,我将用代码来体现进程锁的作用: from threading ...