Java发送QQ邮件
面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼。然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了。
首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop3和smtp服务,其实这就是两个网络协议,一个是接受邮件的协议,一个是发送邮件的协议;
POP3
是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
SMTP
SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
登录网页版的邮箱,在设置-》账户中可开启这两项服务。需要用手机验证一下,然后要保存生成的授权码,这个授权码在代码中或者在第三方邮件管理软件要使用的。
然后就是所需要的jar包资源了,如果使用纯Java代码发送邮件则只需要两个jar包,这里有资源 http://www.runoob.com/java/java-sending-email.html
activation.jar
mail.jar
之后就可以使用代码发送邮件了,以下的代码介绍了发送简单的文本文件和html格式的邮件。
- package qqmail.test;
- import java.util.Date;
- import java.util.Properties;
- import javax.mail.Authenticator;
- import javax.mail.Message;
- import javax.mail.PasswordAuthentication;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeMessage;
- /**
- * 发送QQ邮件
- *
- * @author YaoQi
- * @date 2017年7月13日
- */
- public class TestMail {
- public static void main(String[] args) {
- String from = "34845***@qq.com"; //发件人的邮箱地址
- String to = "16841***@qq.com"; //收件人的邮箱地址
- String subject = "mailTest"; //邮件主题
- String body = "邮件正文"; //邮件内容
- //设置发送邮件的一些属性
- Properties prop = new Properties();
- prop.setProperty("mail.transport.protocol", "smtp");
- prop.setProperty("mail.smtp.host", "smtp.qq.com");
- prop.setProperty("mail.smtp.port", "465");
- prop.setProperty("mail.smtp.auth", "true");
- prop.setProperty("mail.debug", "true");
- prop.setProperty("mail.smtp.ssl.enable", "true"); //qq邮箱必须设置这一项,ssl加密选项
- Session session = Session.getDefaultInstance(prop, new Authenticator() {
- public PasswordAuthentication getPasswordAuthentication() {
- //这里需要验证邮箱的授权码,QQ邮箱需要授权码
- return new PasswordAuthentication(from, "rvrvrjloadxm****");
- }
- });
- MimeMessage message = new MimeMessage(session);
- try {
- Transport transport = session.getTransport();
- message.setFrom(new InternetAddress(from));
- message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
- message.setSentDate(new Date());
- message.setSubject(subject);
- //如果仅仅是发送文本,使用setText()方法
- message.setText(body);
- //如果是发送html格式的邮件则需要使用setContent()方法,并且设置参数text/html; 这两个方法是等价的,后面执行的会覆盖前一个方法设置的内容
- message.setContent("<h1>This is HTML message</h1>","text/html" );
- message.saveChanges();
- session.setDebug(true);
- transport.connect(from, "rvrvrjloadxm****");
- transport.sendMessage(message, message.getAllRecipients());
- transport.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
如果要发送带附件的邮件,则需要添加多重消息,其余部分都一样,最后把消息组合成一个邮件。
- try {
- Transport transport = session.getTransport();
- message.setFrom(new InternetAddress(from));
- message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
- message.setSentDate(new Date());
- message.setSubject(subject);
- // 创建消息体部分
- BodyPart messageBodyPart = new MimeBodyPart();
- messageBodyPart.setText("这是邮件正文");
- // 创建多重消息
- Multipart multipart = new MimeMultipart();
- multipart.addBodyPart(messageBodyPart); // 将消息体部分加入到多重消息中
- // 创建一个附件
- messageBodyPart = new MimeBodyPart();
- File file = new File("D:\\java\\workSpace\\SendMailDemo\\file.txt");
- DataSource source = new FileDataSource(file);
- messageBodyPart.setDataHandler(new DataHandler(source));
- messageBodyPart.setFileName("file");
- multipart.addBodyPart(messageBodyPart);
- message.setContent(multipart);
- message.saveChanges();
- session.setDebug(true);
- transport.connect(from, "rvrvrjloadxm****");
- transport.sendMessage(message, message.getAllRecipients());
- transport.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
Java发送QQ邮件的更多相关文章
- java mail Received fatal alert: handshake_failure java 无法发送邮件问题 java 发送qq邮件(含源码)
java 无法发送邮件问题 java 发送qq邮件 报错:java mail Received fatal alert: handshake_failure (使用ssl) javax.mail.M ...
- 使用java发送QQ邮件
使用java发送邮件的时候,需要先下载两个jar包,连接如下: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 然后将这连个包导入,博主用的是 ...
- 使用java发送QQ邮件的总结
最近帮朋友做个网站,实现用邮箱订阅功能,所以现在把这个发送邮件的功能放在这里,算是这两天工作的总结吧! 首先,想要实现订阅功能,要把邮箱保存,但是这个做的是个小网站,前后台交互的太少了,所以我就直接保 ...
- Java实现QQ邮件发送
首先我们需要两个jar包,点击下面即可下载这两个包: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 我们这里采用QQ邮箱发送邮件为例,代码如 ...
- Java实现QQ邮件发送客户端
目录 一.前言:QQ邮件发送程序 二.封装SMTP操作 三.实现多线程接收 四.QQ邮件客户端界面设计 1.连接按钮 2.发送按钮 五.QQ邮件发送效果演示 六.总结 一.前言:QQ邮件发送程序 在上 ...
- CI框架使用PHPmail插件发送QQ邮件:
有助请顶,不好请评.0:33 2016/3/12CI框架使用PHPmail插件发送QQ邮件:发送成功,不过修改了主机参数,还包含了一个phpmail中的一个另外的文件,详见下方:参见:http://c ...
- 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明
13:40 2015/11/20 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明 关键点:现在qq邮箱开通smtp服务后会给你一个很长的独立新密码,发邮件配置中的密码需要 ...
- 【python】脚本连续发送QQ邮件
今天习得用python写一个连续发送QQ邮件的脚本,经过测试,成功给国内外的服务器发送邮件,包括QQ邮箱.163邮箱.google邮箱,香港科技大学的邮箱和爱丁堡大学的邮箱.一下逐步解答相关技巧. 首 ...
- python3:利用SMTP协议发送QQ邮件+附件
转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...
随机推荐
- blfs(systemv版本)学习笔记-总页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemv版本)学习笔记:https://www.cnblogs.com/renren-study-notes/p/ ...
- c++ cmath头文件
一.前言 c++的一个头文件. 二.常用方法 1. ceil() 定义: c++11 double ceil (double x); float ceil (float x); long double ...
- 为什么 C# 比 C++ 编译快那么多
Go 我不懂,下面以 C++ 和 C# 对比来说明为什么 C++ 编译慢和 C# 编译快. C 和 C++ 文件的编译经过几个主要步骤: 处理续行符处理(“\”)之类的杂事 词法分析,解析出 toke ...
- Cookie管理 WebView同步
NoHttp的Cookie管理原理 在文档的初始化配置一章讲了NoHttp如何配置或者禁用cookie自动管理. NoHttp的Cookie自动维护,严格遵守Http协议,即区分临时Cookie和有效 ...
- jQuery选择元素的方法大全
jQuery选择器其实是一个有些地方比较费解的,如果没有经过多次实验的话,很难得出它的每个操作符到底是干什么的,很容易出错,经过 我的多次测试,终于对一些比较难理解或容易出错的选择操作进行总结,既方便 ...
- Python数据分析_Pandas_窗函数
窗函数(window function)经常用在频域信号分析中.我其实不咋个懂,大概是从无限长的信号中截一段出来,然后把这一段做延拓变成一个虚拟的无限长的信号.用来截取的函数就叫窗函数,窗函数又分很多 ...
- php报错 【 Call to undefined function imagecreatetruecolor()】
刚才在写验证码的时候,发现报错,然后排查分析了一下,原来是所用的php版本(PHP/5.3.13)没有开启此扩展功能. 进入php.ini 找到extension=php_gd2.dll ,将其前面的 ...
- 【PAT】B1067 试密码(20 分)
注意读取时的换行符用getchar吸收 第十个错误后直接输出锁定 #include<cstdio> #include<string.h> int main(){ char mi ...
- Linux之特殊的环境变量IFS以及如何删除带有空格的目录
1.IFS是什么? Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符(internal field separator).IFS环境变量定义了bash shell用户字段分隔符的一系列字 ...
- 10LaTeX学习系列之---Latex的文档结构
目录 目录 前言 (一)对于Ctex宏包中的文档结构 1.说明 2.源代码 3.输出效果 4.技巧 (二)对于ctexart的文档结构 1.说明 2.源代码 3.输出效果 (三)对于ctexbook的 ...