Java实现发送邮箱验证码/注册验证链接
本文以163邮箱为例
1、准备(邮箱账号,邮箱必须设置POP3/SMTP/IMAP,设置步骤如下:)
》》步骤:1 开启授权码服务

》》步骤:2 手机获取验证码

》》步骤:3 设置授权码

》》步骤:4 开启服务smtp/pop3/imap

》》步骤:5 开启成功,忘记授权码可重设

2、发送邮件的jar包(以下使用的为maven的pom坐标)
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
3、代码实现
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties; //发送邮件
public class test {
//配置信息
private static final String MAIL_TRANSPORT_PROTOCOL ="mail.transport.protocol";//邮件的传输协议
private static final String MAIL_TRANSPORT_PROTOCOL_VALUE ="smtp";//使用smtp协议
private static final String MAIL_HOST ="mail.host";//发送邮件的主机
private static final String MAIL_HOST_VALUE ="smtp.163.com"; //发送邮件的服务器地址
private static final String MAIL_DEBUG ="mail.debug"; //调试模式
private static final String MAIL_SMTP_AUTH ="mail.smtp.auth";//邮件smtp作者确认
private static final String CONFIRM ="true";//确认
private static final String SEND_ENCODING_LAYOUT ="text/html;charset=utf-8";//发送邮件的编码格式 //邮件编辑信息(仅需写上自己的)
private static final String MAIL_FROM =xxx@163.com";//邮件发送人
private static final String MAIL_FROM_PASSWORD ="xxxxx";//邮件发送人授权码
private static final String MAIL_SUBJECT_REGISTER ="xxxx【注册链接】";//邮件主题(注册链接)
private static final String MAIL_SUBJECT_VERIFY_CODE ="xxxx【邮箱验证码】";//邮件主题(邮箱验证码)
private static final String MAIL_ORGANIZATION ="xxxx";//邮件组织
private static final String MAIL_WEBSITE ="https://www.xxxx.com/";//组织主页
private static final String MAIL_ORGANIZATION_LOGO ="https://wwwxxxx.com/xxxx/xxxlogo.jpg";//网站logo
private static final String MAIL_ORGANIZATION_QRCODE ="https://www.xxxx.com/xxxx/xxx.jpg";//网站二维码图片 public static void main(String[] args) throws Exception{
sendEmail(MAIL_FROM,
"xxxx@qq.com",
MAIL_SUBJECT_REGISTER,
prettyLayout(MAIL_ORGANIZATION,MAIL_WEBSITE,
MAIL_ORGANIZATION_LOGO,
prettyRegisterLayout("2小时",MAIL_ORGANIZATION,"https://www.xxxx.com/user/register/8asc824jnd741n2c"),
MAIL_ORGANIZATION_QRCODE),
MAIL_FROM_PASSWORD);
sendEmail(MAIL_FROM,
"xxxx@qq.com",
MAIL_SUBJECT_VERIFY_CODE,
prettyLayout(MAIL_ORGANIZATION,MAIL_WEBSITE,
MAIL_ORGANIZATION_LOGO,
prettyQrCodeLayout("2分钟","580123"),
MAIL_ORGANIZATION_QRCODE),
MAIL_FROM_PASSWORD);
} /**
* 发送邮件
* @param from 发送人(邮箱地址)
* @param to 接收人 (邮箱地址)
* @param subject 主题
* @param content 内容
* @param password 密码(密码为授权码不是邮箱的登录密码)
* @throws Exception
*/
public static void sendEmail(String from,String to,String subject,String content,String password) throws Exception{
Properties props = new Properties();//key value:配置参数。真正发送邮件时再配置
props.setProperty(MAIL_TRANSPORT_PROTOCOL, MAIL_TRANSPORT_PROTOCOL_VALUE);//指定邮件发送的协议,参数是规范规定的
props.setProperty(MAIL_HOST, MAIL_HOST_VALUE);//指定发件服务器的地址,参数是规范规定的
// props.setProperty(MAIL_DEBUG, "true");//邮件发送的调试模式,参数是规范规定的
props.setProperty(MAIL_SMTP_AUTH, CONFIRM);//请求服务器进行身份认证。参数与具体的JavaMail实现有关
Session session = Session.getInstance(props);//发送邮件时使用的环境配置
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
//设置邮件的头
message.setFrom(new InternetAddress( from )); //谁发送的
message.setRecipients(Message.RecipientType.TO, to );//发送给谁
message.setSubject( subject );
//设置正文
message.setContent( content ,SEND_ENCODING_LAYOUT);
// message.setText("<h1>hello</h1>");//纯文本
message.saveChanges(); //发送邮件
Transport ts = session.getTransport();
ts.connect( from , password ); // 密码为授权码不是邮箱的登录密码
ts.sendMessage(message, message.getAllRecipients());//对象,用实例方法}
} /**
* 邮件内容头部
* @param websiteName 网站名称
* @param principal 网站主页
* @param principalImage 网站logo图片超链接
* @param logoWidth logo图片宽度
* @param logoHeight logo图片高度
* @return
*/
private static String mailHead(String websiteName,String principal,String principalImage,String logoWidth,String logoHeight){
return "<div style=\"margin: 0 auto; text-align: left;\n" +
"padding: 38px 50px; width: 560px; font-size: 14px;\n" +
"color: #606060; background: #fff; border-radius:\n" +
"2px; font-family:Tahoma,Helvetica,'microsoft\n" +
"yahei','Hiragino Sans GB',Simsun,sans-serif;\n" +
"box-shadow: 0 0 4px rgba(0,0,0,0.2);\">\n" +
" <table style=\"margin: 0 auto;\n" +
"text-align: left; font-size: 14px; color: #606060;\n" +
"background: #fff; font-family: inherit;\n" +
"font-family:Tahoma,Helvetica,'microsoft\n" +
"yahei','Hiragino Sans GB',Simsun,sans-serif;\" width=\"560\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n" +
" <tbody><tr>\n" +
" <th colspan=\"2\"><a href=\""+principal+"\" rel=\"noopener\" target=\"_blank\"><img src=\""+principalImage+"\" width=\""+logoWidth+"\" height=\""+logoHeight+"\"></a></th>\n" +
" </tr>\n" +
" <tr>\n" +
" <td colspan=\"2\" style=\"font-size:\n" +
"18px; padding: 30px 0\n" +
"18px;\">尊敬的"+websiteName+"用户:</td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td colspan=\"2\" style=\"line-height: 1.8;\">\n" +
" \n" +
"<div>欢迎使用"+websiteName+"!</div>\n";
} /**
* 邮件内容脚部
* @param websiteName 网站名称
* @param principal 网站主页
* @param qrCode 二维码图片链接(可不填写/仅支持第一张)
* @return
*/
private static String mailFoot(String websiteName,String principal,String...qrCode){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
String nowDate =sdf.format(new Date());
return " <tr>\n" +
" <td colspan=\"2\" style=\"text-align:\n" +
"right; line-height: 1.8; padding-bottom: 18px;\">\n" +
" <div>"+websiteName+"团队</div>\n" +
" <div style=\"color:\n" +
"#909090;\">"+nowDate+"</div>\n" +
" </td>\n" +
" </tr>\n" +
(qrCode!=null&&qrCode.length!=0?setQrCode(websiteName,qrCode[0]):"")+
" <tr>\n" +
" <td colspan=\"2\" style=\"padding-top: 20px; border-top: 1px solid\n" +
"#e7e7e7; line-height: 1.8; font-size: 12px; color:\n" +
"#909090;\">\n" +
" <div>温馨提示:</div>\n" +
" <div>1.\n" +websiteName+
"官方网址为:<a href=\""+principal+"\" rel=\"noopener\" target=\"_blank\">"+principal+"</a>,请注意网址,防止钓鱼。</div>\n" +
" <div>2.\n" +
"本邮件为系统自动发出,请勿回复。</div>\n" +
" </td>\n" +
" </tr>\n" +
" </tbody></table>\n" +
" </div>";
} /**
* 输出漂亮格式(带logo,可带二维码)
* @param websiteName 网站名称
* @param principal 主页地址
* @param principalImage 主页logo 323 x 48 拉伸宽度为 (超链接形式)
* @param business 业务
* @param qrCode 二维码 (超链接形式)
* @return
*/
private static String prettyLayout(String websiteName,String principal,String principalImage,String business,String...qrCode){
return mailHead(websiteName,principal,principalImage,"","")+
business +
mailFoot(websiteName,principal,qrCode); } /**
* 二维码 样式A
* @param websiteName //网站名称
* @param qrCode //二维码图片链接
* @return
*/
private static String setQrCode(String websiteName,String qrCode){
return " <tr>\n" +
" <td style=\"padding-bottom: 20px;\" width=\"145\">\n" +
" <img src=\""+qrCode+"\" width=\"110\" height=\"112\">\n" +
" </td>\n" +
" <td style=\"line-height: 2;\n" +
"padding-bottom: 20px;\">\n" +
" <div style=\"font-size: 18px;\n" +
"color:\n" +
"#03c5ff;\">扫描关注"+websiteName+"公众号</div>\n" +
" </td>\n" +
" </tr>\n" ;
} /**
* 发送邮箱验证码
* @param validity 有效期/单位自行填写
* @param verifyCode 验证码
* @return
*/
private static String prettyQrCodeLayout(String validity,String verifyCode){
return "<div>邮箱验证码的有效期为:"+validity+"邮箱验证码如下:</div>\n" +
" </td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td colspan=\"2\" style=\"font-size:\n" +
"12px; line-height: 20px; padding-top: 14px;\n" +
"padding-bottom: 25px; color: #909090;\">\n" +
" <div>"+verifyCode+"</div>\n" +
" </td>\n" +
" </tr>\n";
} /**
* 发送邮箱注册激活链接
* @param validity 有效期/单位自行填写
* @param websiteName 网站名
* @param verifyLink 注册验证链接
* @return
*/
private static String prettyRegisterLayout(String validity,String websiteName,String verifyLink){
return "<div>请点击以下的链接验证您的邮箱,验证成功后就可以使用"+websiteName+"提供的服务了。</div>\n" +
" </td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td colspan=\"2\" style=\"font-size:\n" +
"12px; line-height: 20px; padding-top: 14px;\n" +
"padding-bottom: 25px; color: #909090;\">\n" +
" <div>该链接的有效期为"+validity+",如链接超过有效期请重新发送邮件<a href=\""+verifyLink+"\" style=\"color: #03c5ff; text-decoration:\n" +
"underline;\" rel=\"noopener\" target=\"_blank\">"+verifyLink+"</a></div>\n" +
" <div style=\"padding-top:\n" +
"4px;\">(如果不能打开页面,请复制该地址到浏览器打开)</div>\n" +
" </td>\n" +
" </tr>\n";
} }
Java实现发送邮箱验证码/注册验证链接的更多相关文章
- java代码发送邮箱验证码与qq邮箱smtp服务
发送邮箱的类封装,在此之前需要一个jar包 javax.mail.jar 下载链接https://github.com/javaee/javamail/releases/download/JAVAM ...
- tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片
本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...
- 本博文将一步步带领你实现抽屉官网的各种功能:包括登陆、注册、发送邮箱验证码、登陆验证码、页面登陆验证、发布文章、上传图片、form验证、点赞、评论、文章分页处理以及基于tronado的后端和ajax的前端数据处理。
本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tronado的后端和ajax的 ...
- 发送邮箱验证码、session校验
本篇主要描述“发送邮箱验证码.session校验”相关前(html\js)后(java)台代码,业务逻辑示例,闲话少诉,直接上代码. 1.引入的jar包是mail-1.4.jar 2.java底层发送 ...
- java-阿里邮件推送服务开发 -- 发送邮箱验证码
参考文档: 如何在 DNS 服务器上配置域名:https://help.aliyun.com/knowledge_detail/39397.html?spm=5176.2020520150.102.d ...
- Java实现发送手机验证码功能(短信+语音)
利用第三方平台可以实现发送手机短信验证码和语音验证码的功能,本文使用框架是struts2+spring+hibernate,现就action层给出核心代码功能. public class Verify ...
- asp.net mvc 发送邮箱验证码
public ActionResult Index() { /*第一种,利用Google的smtp来发送邮件*/ SmtpClient client = ); Random Rdm = new Ran ...
- 用node实现发送邮箱验证码
首先,你需要注册一个支持发送的邮箱,我注册是网易邮箱,然后配置smtp. 然后,创建一个node项目,输入npm install nodemailer --save安装邮件依赖. 接着创建一个文件(s ...
- 第一次发博,发个简单的Java程序发送手机短信验证
最近在准备一个项目,想的登录时候用手机验证,就通过上网查阅了一下手机验证的实现方法,原来超级简单,下面将一步一步介绍. 1.去中国网建注册一个账号密码,首次注册送五条免费短信和3条免费彩信.具体的网址 ...
随机推荐
- hibernate 一级缓存、二级缓存
一级缓存:——session一旦关掉就没有了.使用 load和get加载对象的时候,会自动加载到缓存,读取的也会读缓存. public void huancun(){ Session session= ...
- WampServer 2.5设置外网访问/局域网手机访问(403 Forbidden错误解决方法)
安装好wamp后,想用手机通过局域访问电脑上wamp下的网页,结果出现如下提示. (403 Forbidden)错误 1.打开http.conf文件 2.找到下图中红色方框中的onlineofflin ...
- linux命令学习笔记(59):rcp命令
rcp代表“remote file copy”(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝:第二种格式用于把文件或目录拷贝到另一个目录中. . ...
- ACM学习历程—HDU5407 CRB and Candies(数论)
Problem Description CRB has N different candies. He is going to eat K candies.He wonders how many co ...
- bzoj 4199: [Noi2015]品酒大会 后缀树
题目大意: 给定一个长为n的字符串,每个下标有一个权\(w_i\),定义下标\(i,j\)是r相似的仅当\(r \leq LCP(suf(i),suf(j))\)且这个相似的权为\(w_i,w_j\) ...
- VC6++常用快捷键
VC6快捷键大全(转载) VC6快捷键大全,记在这里,方便查阅.F1: 帮助Ctrl+O :OpenCtrl+P :PrintCtrl+N :NewCtrl+Shift+F2 :清除所有书签F2 :上 ...
- POJ1703(2集合并查集)
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39402 Accepted: ...
- HDOJ1251(前缀匹配---分块查找&map应用)
分块查找算法 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...
- DTP模型之一:(XA协议之一)XA协议、二阶段2PC、三阶段3PC提交
XA协议 XA是一个分布式事务协议,由Tuxedo提出.XA中大致分为两部分:事务管理器和本地资源管理器.其中本地资源管理器往往由数据库实现,比如Oracle.DB2这些商业数据库都实现了XA接口,而 ...
- 【推荐系统】Netflix 推荐系统:第二部分
原文链接:http://techblog.netflix.com/2012/06/netflix-recommendations-beyond-5-stars.htm 在 blog 的第一部分,我们详 ...