博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于JavaMail向邮箱发送邮件
阅读量:6048 次
发布时间:2019-06-20

本文共 4024 字,大约阅读时间需要 13 分钟。

参考:

最近想写一个注册界面,好多的网站注册的时候需要填写邮箱,向邮箱发一个验证链接,怎么实现向邮箱发送验证邮件呢?

Java提供了一个编写邮件,搭建连接,发送邮件的jar包,JavaMail提供了操作的所有工具,我们只需要简单的调用,设置参数,就可以实现Java发送邮件

jar包下载链接:

下载之后解压里面有一个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邮箱发送邮件,实测是可以接收到的。

转载于:https://www.cnblogs.com/duzhentong/p/7816577.html

你可能感兴趣的文章
AOJ 2201 Divide the Cake 题解 《挑战程序设计竞赛》
查看>>
Spring插件安装,及快速开发Spring Web mavan 项目
查看>>
5_iframe.html
查看>>
关于RDD之间的转换逻辑的存储
查看>>
JavaScript 演练(1). 定义一组常量或一组函数
查看>>
VMM系列之使用VMM服务器构建 Hyper-V主机(2)
查看>>
微信小程序 - 拨打电话
查看>>
NAT技术及代理服务器
查看>>
Cocoapods: 打造本地 pod 库 和 错误解决方法
查看>>
MVP更新成功
查看>>
nagios安装(监控项目调试)
查看>>
C++ 字符串各种处理
查看>>
LAMP--3.Apache 的 mpm 工作模式
查看>>
cacti 监控 mysql 的几种方法 _ 参考用
查看>>
Linux 特殊位权限s,t,i,a
查看>>
北国之冬,南国之春
查看>>
Spring学习笔记三--autowire
查看>>
实战:Android活动目录LiveFolder开发
查看>>
Mac 配置VIM插件 提示"E492:Not an editor command:^M"
查看>>
linux grep
查看>>