java发qq_使用Java发送qq邮件

邮件发送

环境说明:

建立一个maven工程

qq邮箱开启pop3和smtp服务

1. 获取邮箱授权码

打开qq邮箱设置按下图操作

f687936f0359aaefc2cc0c9a19b1c99b.png

517f7930a771985f8a71a3345caa6246.png

2. 需要的依赖

javax.mail

mail

1.4.7

3. 创建一个邮件工具类

package com.gxa.yonghu.util;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import java.util.Properties;

/**

* @author 枫叶

* @version 1.0

* @date 2020/12/22

*/

public class MailUtil implements Runnable {

// 发件人账号

public final static String MAIL_NAME = "发件人账户";

// 发件人授权码

public final static String MAIL_CODE = "第一步中获取的授权码";

// 登录的用户名

private String username = null;

// 收件人邮箱

private String email = null;

//邮件主题

private String motif = null;

//邮件内容

private String contentText = null;

public MailUtil(String username, String email, String motif, String content) {

this.username = username;

this.email = email;

this.motif = motif;

this.contentText = content;

}

@Override

public void run() {

// 指定发送邮件的主机smtp.qq.com(QQ)|smtp.163.com(网易) 这里需要继续扩展做判断分支处理

String host = "smtp.qq.com";

// 获取系统属性

Properties properties = System.getProperties();

// 设置邮件服务器

properties.setProperty("mail.smtp.host", host);

// 打开认证

properties.setProperty("mail.smtp.auth", "true");

try {

//QQ邮箱需要下面这段代码,163邮箱不需要

MailSSLSocketFactory sf = new MailSSLSocketFactory();

sf.setTrustAllHosts(true);

properties.put("mail.smtp.ssl.enable", "true");

properties.put("mail.smtp.ssl.socketFactory", sf);

// 1.获取默认session对象

Session session = Session.getDefaultInstance(properties, new Authenticator() {

@Override

public PasswordAuthentication getPasswordAuthentication() {

// 发件人邮箱账号、授权码

return new PasswordAuthentication(MailUtil.MAIL_NAME, MailUtil.MAIL_CODE);

}

});

// 2.创建邮件对象

Message message = new MimeMessage(session);

// 3.设置发件人

message.setFrom(new InternetAddress(MailUtil.MAIL_NAME));

// 4.设置收件人

message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));

// 5.设置邮件主题

message.setSubject(motif);

// 6.设置邮件内容

String content = "

" + contentText + "";

message.setContent(content, "text/html;charset=UTF-8");

// 7.发送邮件

// 阻塞方法

Transport.send(message);

System.out.println("邮件成功发送!");

} catch (Exception e) {

e.printStackTrace();

}

}

}

4. 发送邮件

这里用servlet做演示,接收一个包含邮箱信息的json

/**

* @author 枫叶

* @version 1.0

* @date 2020/12/22

*/

@WebServlet(value = "/mail/send",name = "mail")

public class MailServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doPost(req,resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//这里使用了fastJson解析,若不想使用fastJSON可以自己使用自己喜欢的解析方式,fastJSON依赖如下

/**

*

* com.alibaba

* fastjson

* 1.2.72

*

*/

JSONObject json = JSONObject.parseObject(req.getReader().readLine());

//获取参数

String email = json.getString("email");

System.out.println(json);

//参数验证

if (email==null||"".equals(email)){

resp.getWriter().println(DataResponse.error(400,"参数不足"));

return;

}

//其它业务

//创建html邮件内容,只需输入body中的代码

String content = "

邮件标题

"

+"邮件内容";

MailUtil mail = new MailUtil("发件人", email,"邮件主题",content);

//发送邮件

new Thread(mail).start();

resp.getWriter().println(DataResponse.ok());

}

}

5. 上面用到的返回封装类DataResponse如下

public class DataResponse{

private final Map result;

@Override

public String toString() {

//这里也用到了fastJSON并且设置了日期的格式化格式

JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd hh:mm:ss";

return JSON.toJSONString(result,SerializerFeature.WriteDateUseDateFormat);

}

public DataResponse(Integer code,String msg,Object data){

result = new HashMap<>();

result.put("code",code);

result.put("msg",msg);

result.put("data",data);

}

public DataResponse(Integer code,String msg){

this(code,msg,null);

}

public DataResponse() {

result=new HashMap<>();

}

public DataResponse put(String key,Object value){

result.put(key,value);

return this;

}

public static DataResponse ok(){

return new DataResponse(200,"成功!");

}

public static DataResponse ok(String msg){

return new DataResponse(200,msg);

}

public static DataResponse ok(int code,String msg){

return new DataResponse(code,msg);

}

public static DataResponse ok(String msg,Object data){

return new DataResponse(200,msg,data);

}

public static DataResponse ok(int code,String msg,Object data){

return new DataResponse(200,msg,data);

}

public static DataResponse error(){

return new DataResponse(500,"服务器错误,操作失败!");

}

public static DataResponse error(String msg){

return new DataResponse(500,msg);

}

public static DataResponse error(int code,String msg){

return new DataResponse(code,msg);

}

public Object get(String key){

return result.get(key);

}

public Object getData(){

return result.get("data");

}

public void setCode(int code) {

result.put("code",code);

}

public void setMsg(String msg) {

result.put("msg",msg);

}

public void setData(Object data) {

result.put("data",data);

}

}

6. 启动服务发送邮件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值