基于JavaMail向邮箱发送邮件
参考:http://blog.csdn.net/ghsau/article/details/17839983
http://blog.csdn.net/never_cxb/article/details/50543289
最近想写一个注册界面,好多的网站注册的时候需要填写邮箱,向邮箱发一个验证链接,怎么实现向邮箱发送验证邮件呢?
Java提供了一个编写邮件,搭建连接,发送邮件的jar包,JavaMail提供了操作的所有工具,我们只需要简单的调用,设置参数,就可以实现Java发送邮件
下载之后解压里面有一个mail.jar,添加到项目里。
示例代码:
- public static void sendMail (){
- 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 = null;
- Message msg = null;
- Transport transport = null;
- try {
- 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);
- // 创建邮件对象
- msg = new MimeMessage(session);
- msg.setSubject("JavaMail测试");
- // 设置邮件内容
- msg.setText("这是一封由JavaMail发送的邮件!");
- // 设置发件人
- msg.setFrom(new InternetAddress("19583219822@qq.com"));
- transport = session.getTransport();
- // 连接邮件服务器
- transport.connect("发件邮箱", "发件邮箱登录授权码");
- // 发送邮件
- transport.sendMessage(msg, new Address[] {new InternetAddress("收件邮箱")});
- } catch (GeneralSecurityException e) {
- e.printStackTrace();
- } catch (AddressException e) {
- e.printStackTrace();
- } catch (NoSuchProviderException e) {
- e.printStackTrace();
- } catch (MessagingException e) {
- e.printStackTrace();
- }finally {
- // 关闭连接
- try {
- transport.close();
- } catch (MessagingException e) {
- e.printStackTrace();
- }
- }
- }
在第三方客户端登录时,密码框请输入授权码
获取授权码的方法(QQ邮箱):登录到qq邮箱找到设置
点击账户
找到POP3服务,点击开启,之后经过验证就可以得到一个授权码
实际测试中发现向qq邮箱中发送邮件程序总会报错,后来经过百度到大神的文章,才知道 QQ 邮箱需要 SSL 加密。
开启 SSL 加密,其他比如163就不需要 SSL 加密……
既然需要加密就加上SSL加密的代码:
- MailSSLSocketFactory sf = new MailSSLSocketFactory();
- sf.setTrustAllHosts(true);
- props.put("mail.smtp.ssl.enable", "true");
- props.put("mail.smtp.ssl.socketFactory", sf);
完整代码:
- public static void sendMail (){
- 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 = null;
- Message msg = null;
- Transport transport = null;
- try {
- 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);
- msg = new MimeMessage(session);
- msg.setSubject("标题");
- // 设置邮件内容
- msg.setText("邮件内容………………………………");
- msg.setFrom(new InternetAddress("发件邮箱"));
- transport = session.getTransport();
- transport.connect("smtp.qq.com", "发件邮箱", "授权码");
- transport.sendMessage(msg, new Address[] { new InternetAddress("收件邮箱") });
- } catch (GeneralSecurityException e) {
- e.printStackTrace();
- } catch (AddressException e) {
- e.printStackTrace();
- } catch (NoSuchProviderException e) {
- e.printStackTrace();
- } catch (MessagingException e) {
- e.printStackTrace();
- }finally {
- try {
- transport.close();
- } catch (MessagingException e) {
- e.printStackTrace();
- }
- }
- }
前面的代码固定,参数也是固定的,其实也很好理解,搭建链接,设置参数,设置邮件内容,发送
运行成功后控制台显示:
为了验证程序,作者注册了一个163邮箱,用QQ邮箱向163邮箱发送邮件,实测是可以接收到的。
基于JavaMail向邮箱发送邮件的更多相关文章
- 基于java mail实现简单的QQ邮箱发送邮件
刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...
- JavaMail实现邮箱之间发送邮件功能
package com.minstone.message.util; import java.util.Date; import java.util.Properties; import javax. ...
- 基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决)
在虽然日常生活中,QQ,微信等即时聊天工具几乎主导了人们的生活,但是邮件依然是现代生活不可缺少的一部分.这篇文章主要讲述使用node.js 中的nodemail模块操作阿里云的企业邮箱发送邮件 (52 ...
- javamail实现邮箱验证功能
javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...
- 基于JavaMail开发邮件发送器工具类
基于JavaMail开发邮件发送器工具类 在开发当中肯定会碰到利用Java调用邮件服务器的服务发送邮件的情况,比如账号激活.找回密码等功能.本人之前也碰到多次这样需求,为此特意将功能封装成一个简单易用 ...
- 基于javaMail的邮件发送--excel作为附件
基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...
- Java 基于javaMail的邮件发送(支持附件)
基于JavaMail的Java邮件发送Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用户 ...
- 基于JavaMail的Java邮件发送:复杂邮件发送
参考:http://blog.csdn.net/xietansheng/article/details/51722660package com.bfd.ftp.utils;import java.ut ...
- Java JavaMail通过SMPT发送邮件
概述 本讲讲述如何使用JavaMail工具包,通过SMPT协议,在Java代码中发送邮件. 一.JavaMail简介 JavaMail API提供了一个独立于平台且与协议无关的框架来构建邮件和消息传递 ...
随机推荐
- elasticsearch-5.1.1使用snapshot接口备份索引
如果ES是集群,那么需要使用共享存储,支持的存储有:a.shared file systemb.S3c.HDFS 我使用的是第一种,NFS共享文件系统.这里要说一下权限问题,ES一般是使用 elast ...
- java异常处理、多态
第一:GC是什么? 为什么要有GC? 第二:垃圾回收的优点和原理.并考虑2种回收机制. 第三:垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 第 ...
- Integer 与 int
Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况 例如,要想表达出没 ...
- Linux PCI/PCI-E设备配置空间读取与修改
Linux PCI/PCI-E设备配置空间读取与修改 1 前言 PCI和PCI Express,是计算机常使用的一种高速总线.操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及 ...
- Android常见漏洞
Android常见漏洞 漏洞名称: Log敏感信息泄露 漏洞描述: 程序运行期间打印了用户的敏感信息,造成泄露 修改建议: 建议禁止隐私信息的log 漏洞名称: web https校验错误忽略漏洞 漏 ...
- WIN2003+IIS6+FastCGI+PHP5.3的安装配置
本文所用的软件的下载地址 fastcgi的下载地址:http://download.microsoft.com/download/E/0/C/E0C0709A-66E5-4113-9A6C-A5F65 ...
- Learning part-based templates from large collections of 3D shapse CorrsTmplt Kim 代码调试
平台: VMware上装的Ubuntu-15.10 环境准备工作:装Fortran, lapack, blas, cblas (理论上装好lapack后面两个应该是自动的),其他的有需要的随时安装就可 ...
- val(),text(),html()的区别
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script> ...
- intra调用order
response = orderMessageService.apply(mdpRequest[A1] ); public interface OrderMessageService[A2] { pu ...
- JAVA几种缓存技术介绍说明
OSCache OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案. OSCache有以下特点: 我创建了一个群,群里不定期分享技术 ...