Java 基于JavaMail实现向QQ邮箱发送邮件(未测试)
1
需求
最近项目在做新闻爬虫,想实现这个功能:爬虫某个页面失败后,把这个页面的 url 发到笔者的邮箱。最终实现的效果图如下,后期可以加上过滤标签、失败状态码等,方便分类搜索异常。
开发人员可以根据邮件里的 url 和堆栈信息,分析爬虫失败的原因。
- 是不是服务器 down 了?
- 还是爬虫的 Dom 解析没有解析到内容?
- 还是正则表达式对于这个页面不适用?
开启SMTP服务
在 QQ 邮箱里的 设置->账户里开启 SMTP 服务
注意开启完之后,QQ 邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原始的邮箱密码,这样可以避免使用明文密码。
下载依赖的 jar 包
官方下载地址 http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html#javamail-1.4.7-oth-JPR。
解压完之后,通常我们只需要其中的mail.jar
,把它加到我们 java 工程的依赖包中。
代码
网上查了一下例子,根据这篇文章 Java Mail(二):JavaMail介绍及发送一封简单邮件 的示例代码。
Properties props = new Properties();// 开启debug调试
props.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", "smtp.qq.com");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");Session session = Session.getInstance(props);//邮件内容部分
Message msg = new MimeMessage(session);
msg.setSubject("seenews 错误");
StringBuilder builder = new StringBuilder();
builder.append("url = " + "http://blog.csdn.net/never_cxb/article/details/50524571");
builder.append("页面爬虫错误");
builder.append("\n data " + TimeTool.getCurrentTime());
msg.setText(builder.toString());
//邮件发送者
msg.setFrom(new InternetAddress("**发送人的邮箱地址**"));//发送邮件
Transport transport = session.getTransport();
transport.connect("smtp.qq.com", "**发送人的邮箱地址**", "**你的邮箱密码或者授权码**");transport.sendMessage(msg, new Address[] { new InternetAddress("**接收人的邮箱地址**") });
transport.close();
但是报错了
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN failed
Exception in thread "main" javax.mail.AuthenticationFailedException: 530
Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28
因为示例代码是用的163邮箱,而笔者是 QQ 邮箱,看 Log 分析是 QQ 邮箱需要 SSL 加密。
开启 SSL 加密
网上搜了一下,其他比如163、新浪邮箱不需要 SSL 加密,可以放弃 QQ 邮箱。
网上还有种说法,把 smtp.qq.com
换成 smtp.exmail.qq.com
也不需要 SSL加密,但是笔者没有run成功。所以还是老老实实加上 SSL 加密吧。
下面的代码开启了 SSL 加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);
成功了,控制台输出 Log 和效果图如下
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.qq.com", port 465, isSSL true
220 smtp.qq.com Esmtp QQ Mail Server
DEBUG SMTP: connected to host "smtp.qq.com", port: 465
...data 2016-01-19 17:00:44 Tue
.
250 Ok: queued as
QUIT
221 Bye
完整代码示例
public class MailTool {public static void main(String[] args) throws MessagingException, GeneralSecurityException {Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要身份验证props.setProperty("mail.smtp.auth", "true");// 设置邮件服务器主机名props.setProperty("mail.host", "smtp.qq.com");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);props.put("mail.smtp.ssl.enable", "true");props.put("mail.smtp.ssl.socketFactory", sf);Session session = Session.getInstance(props);Message msg = new MimeMessage(session);msg.setSubject("seenews 错误");StringBuilder builder = new StringBuilder();builder.append("url = " + "http://blog.csdn.net/never_cxb/article/details/50524571");builder.append("\n页面爬虫错误");builder.append("\n时间 " + TimeTool.getCurrentTime());msg.setText(builder.toString());msg.setFrom(new InternetAddress("**发送人的邮箱地址**"));Transport transport = session.getTransport();transport.connect("smtp.qq.com", "**发送人的邮箱地址**", "**你的邮箱密码或者授权码**");transport.sendMessage(msg, new Address[] { new InternetAddress("**接收人的邮箱地址**") });transport.close();}
}
Java 基于JavaMail实现向QQ邮箱发送邮件(未测试)相关推荐
- Java基于JavaMail实现向QQ邮箱发送邮件遇到的问题
最近使用Java基于JavaMail实现向QQ邮箱发送邮件老是发送失败,在网上搜了下,终于找到原因,记录下. 参考:http://www.jb51.net/article/78405.htm 网上还有 ...
- 基于java mail实现简单的QQ邮箱发送邮件
刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...
- java发送qq邮箱不成功_java,_使用QQ邮箱发送邮件遇到的问题,java - phpStudy
使用QQ邮箱发送邮件遇到的问题 代码是在网上抄的别人今年写的,但是我运行起来一直报错,也不知道什么原因,请大神帮忙指点一下::谢谢!!! 以下是我的代码 public class Sendmail8 ...
- Java mail使用QQ邮箱发送邮件配置方案
Java mail使用QQ邮箱发送邮件配置方案 java mail配置了QQ邮箱作为服务器发送邮件,结果导致出现503异常: Authentication failed; nested excepti ...
- java模拟登录qq邮箱_使用Java实现qq邮箱发送邮件
本文实例为大家分享了Java操作qq邮箱发送邮件的具体代码,供大家参考,具体内容如下 今天尝试了使用QQ邮箱的POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务来进行发送 ...
- java 发送激活邮件 以qq邮箱为例
java发送激活邮件 以qq邮箱为例 1.首先发送者邮箱需要开启服务 登录qq邮箱,选择设置--账号,开启以上两个服务.会获得相应的两个授权码 2.以下代码为发送邮件代码 package com.em ...
- legend3---lavarel中使用qq邮箱发送邮件
legend3---lavarel中使用qq邮箱发送邮件 一.总结 一句话总结: 第一步:配置邮箱做服务器,比如qq邮箱,网易163邮箱 第二步:配置lavarel的配置文件 第三部:写邮件发送代码就 ...
- python3利用smtplib通过qq邮箱发送邮件
前言 本文主要给大家介绍了关于python3 smtplib通过qq邮箱发送邮件的相关内容, smtplib模块是smtp简单邮件传输协议客户端的实现,为了通用性,有时候发送邮件的时候要带附件或图片, ...
- php模拟登录qq邮箱_PHP 利用QQ邮箱发送邮件的实现
这篇文章主要介绍了关于PHP 利用QQ邮箱发送邮件的实现,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下在 PHP 应用开发中,往往需要验证用户邮箱.发送消息通知,而使用 PHP 内置的 ...
- python 用QQ邮箱发送邮件
SMTP 是发送邮件的协议.Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮箱. Python对SMTP支持有smtplib 和email 两个模块,email负责构造 ...
最新文章
- [您有新的未分配科技点]可,可,可持久化!?------0-1Trie和可持久化Trie普及版讲解...
- GitHub 热榜:中国博士开发可交互全球疫情地图,登上柳叶刀!
- Spring boot 参数校验
- Linux文件目录操作指令
- 学习《HTML+CSS基础课程》里的权值
- 数据结构知识点大汇总(四)
- java回忆录—输入输出流详细讲解(入门经典)
- ZF环境要求及如何配置
- loader 编写一个android_Android之Loader理解
- CentOS 7系统升级备份恢复实验记录
- 5.9 亿国内用户简历遭殃,数据库持续“裸奔”!
- linux 触屏设备 无法处理touchevent_一次通讯干扰处理
- Vue电影网站构建实战教程
- Android项目编译异常之AAPT: error
- 商业智能,数据仓库,ETL,数仓调度工具informatica介绍手账(三)
- OpenStack高级控制服务之使用编配服务(Heat)实现自动化部署云主机
- leetcode之Isomorphic strings
- 2022摄影摄像行业年度分析报告:单反小幅下滑,微单销额增长超32%
- linux 应用编程(持续更新)
- 阿里巴巴Java开发手册认证考试题库
热门文章
- 一文入手 JUC(20+单元)
- MATLAB(3)MATLA 求极限 求积分 求微分 求级数的和
- 安装unbuntu,vmware傻瓜式笔记
- python汇率兑换程序_Python中汇率兑换程序的实现,python
- 如何删除“我的电脑”、“此电脑”中坚果云图标--三种方法(2020年的可行方案)
- 云杰恒指:6.20恒指期货早盘资讯
- linux curl证书错误,curl – SSL证书错误
- 基于华为java编程规范的checkstyle.xml以及格式化模版,注释模版
- centos linux系统后门程序
- 【渝粤教育】电大中专计算机职业素养 (11)作业 题库