Java发送(QQ)邮箱、验证码发送

这篇具有很好参考价值的文章主要介绍了Java发送(QQ)邮箱、验证码发送。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

使用Java应用程序发送 E-mail 十分简单,但是首先需要在项目中导入 JavaMail API 和Java Activation Framework (JAF) 的jar包。

菜鸟教程提供的下载链接:

  • JavaMail mail.jar 1.4.5
  • JAF(版本 1.1.1) activation.jar

1、准备工作

1.1 导包

在基础Java工程中

首先在项目目录下创建libs文件夹后将下载好的jar包复制进去,最后鼠标右击选择添加为库完成jar包的导入操作。

Java发送(QQ)邮箱、验证码发送,Java基础,java,开发语言,程序人生,windows,信息与通信

如果是Maven工程,只需要导入相应的坐标即可。

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

下面采用基础项目的方式展开。

1.2 开启IMAP/SMTP服务

以QQ邮箱为例

Java发送(QQ)邮箱、验证码发送,Java基础,java,开发语言,程序人生,windows,信息与通信

QQ 邮箱通过生成授权码来设置密码:

Java发送(QQ)邮箱、验证码发送,Java基础,java,开发语言,程序人生,windows,信息与通信

2、发送一篇简单的E-mail

一些常用邮件服务商的SMTP信息:

  • QQ邮箱:SMTP服务器是smtp.qq.com,端口是465/587;
  • 163邮箱:SMTP服务器是smtp.163.com,端口是465;
  • Gmail邮箱:SMTP服务器是smtp.gmail.com,端口是465/587。

2.1 连接

通过JavaMail API连接到SMTP服务器上:

// 收件人电子邮箱
String to = "XXX@qq.com";

// 发件人电子邮箱
String from = "XXX@qq.com";

//生成的授权码
String password = "*******";

// 指定发送邮件的主机为 smtp.qq.com
String host = "smtp.qq.com";  //QQ 邮件服务器

// 获取系统属性
Properties properties = System.getProperties();

// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);

properties.put("mail.smtp.auth", "true");
// 获取默认session对象
Session session = Session.getDefaultInstance(properties,new Authenticator(){
    public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(from, password); //发件人邮件用户名、授权码
         }
    });

// 设置debug模式便于调试:
session.setDebug(true);

2.2 发送

发送邮件时,我们需要构造一个Message对象,然后调用Transport.send(Message)即可完成发送:

// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);

// Set From: 头部头字段
message.setFrom(new InternetAddress(from));

// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));

// Set Subject: 头部头字段
message.setSubject("这是邮件主题!","UTF-8");

// 设置消息体
message.setText("这是邮件正文","UTF-8");

// 发送消息
Transport.send(message);

//发送完成后控制台打印输出
System.out.println("Sent message successfully....");

2.3 完整写法

// 文件名 SendEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail
{
    public static void main(String [] args)
    {
       // 收件人电子邮箱
    String to = "XXX@qq.com";

    // 发件人电子邮箱
    String from = "XXX@qq.com";

    //生成的授权码
    String password = "*******";

    // 指定发送邮件的主机为 smtp.qq.com
    String host = "smtp.qq.com";  //QQ 邮件服务器

    // 获取系统属性
    Properties properties = System.getProperties();

    // 设置邮件服务器
    properties.setProperty("mail.smtp.host", host);

    properties.put("mail.smtp.auth", "true");
    // 获取默认session对象
    Session session = Session.getDefaultInstance(properties,new Authenticator(){
        public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(from, password); //发件人邮件用户名、授权码
             }
        });

    // 设置debug模式便于调试:
    session.setDebug(true);

            try{
               // 创建默认的 MimeMessage 对象
    MimeMessage message = new MimeMessage(session);

    // Set From: 头部头字段
    message.setFrom(new InternetAddress(from));

    // Set To: 头部头字段
    message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));

    // Set Subject: 头部头字段
    message.setSubject("这是邮件主题!","UTF-8");

    // 设置消息体
    message.setText("这是邮件正文","UTF-8");

    // 发送消息
    Transport.send(message);

    //发送完成后控制台打印输出
    System.out.println("Sent message successfully....");
            }catch (MessagingException mex) {
                mex.printStackTrace();
            }
        }
}

如果你想发送一封e-mail给多个收件人,那么使用下面的方法来指定多个收件人ID:

void addRecipients(Message.RecipientType type,Address[] addresses) throws MessagingException

下面是对于参数的描述:

  • **type:**要被设置为 TO, CC 或者 BCC,这里 CC 代表抄送、BCC 代表秘密抄送。举例:Message.RecipientType.TO
  • addresses: 这是 email ID 的数组。在指定电子邮件 ID 时,你将需要使用 InternetAddress() 方法。

2.4 效果

Java发送(QQ)邮箱、验证码发送,Java基础,java,开发语言,程序人生,windows,信息与通信

3、发送一封 HTML E-mail

发送HTML邮件和文本邮件是类似的,只需要把:

message.setText(body, "UTF-8");

改为:

message.setText(body, "UTF-8", "html"); 

一般这个都是以发验证码的为主,所以我仿照Apifox做了个发验证码的页面vericode.html,做的不是很标准。😢

Java发送(QQ)邮箱、验证码发送,Java基础,java,开发语言,程序人生,windows,信息与通信

3.1 HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>博客 邮箱验证码</title>
    <style>

        .main {
            margin: 10px auto;
            width: 520px;

            border-top: 4px solid #9373EE;
            padding: 24px 24px 40px;
            border-radius:0 0 8px 8px;
            box-shadow: 0px 0px 1px;
        }

        .title {
            margin: 80px auto 32px;
            font-size: 32px;
            font-weight: 600;
            line-height: 45px;
            letter-spacing: 0px;

        }

        .note {
            margin: 0 auto;
            font-size: 18px;
            line-height: 1.4;
            left: 0px;
            top: 77px;
            font-weight: 400;
        }

        .code {
            padding: 16px;
            text-align: center;
            background: rgba(147, 115, 238, 0.04);
            border-radius: 4px;
            font-weight: 600;
            font-size: 24px;
            line-height: 140%;
            color: #9373EE;
            margin: 24px 0;
            letter-spacing: 1px;
        }

        .claim ul {
            margin-top: 34px;
            margin-bottom: 40px;
            font-size: 13px;
            line-height: 1.6;
            color: #5c5c5c;
            padding: 25px 0;

        }

        .claim ul li {
            color: rgba(24, 24, 25, 0.42);
            line-height: 30px;
        }

        .footer {
            font-size: 13px;
            line-height: 1.6;
            color: #5c5c5c;
            padding: 25px 0
        }
        .title,.note,.claim,.footer {
            text-align: center;
        }
    </style>
</head>
<body>
<div class="main">
    <div class="title">博客 邮箱账号验证码</div>
    <div class="note">你正在进行邮箱验证操作,验证码为:</div>
    <div class="code" :data="123456">1EM456</div>

    <div class="claim">
        <ul style="list-style: none;">
            <li style="list-style: none;">此验证码 15 分钟内有效</li>
            <li style="list-style: none;">如非本人操作</li>
            <li style="list-style: none;">转给他人将导致账号被盗和个人信息泄漏,谨防诈骗</li>
        </ul>
    </div>

    <div class="footer">
        <a href="https://blog.csdn.net/qq_62254095?spm=1018.2226.3001.5343" target="_blank" style="color: #9373EE; text-decoration: none;">个人博客</a> - 记录学习的每一分钟
    </div>
</div>
</body>
</html>

3.2 完整写法

// 文件名 SendHTMLEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;


public class SendHTMLEmail
{
    public static String vericodeHtml = "<!DOCTYPE html>\n" +
            "<html lang=\"en\">\n" +
            "<head>\n" +
            "    <meta charset=\"UTF-8\">\n" +
            "    <title>博客 邮箱验证码</title>\n" +
            "    <style>\n" +
            "\n" +
            "        .main {\n" +
            "            margin: 10px auto;\n" +
            "            width: 520px;\n" +
            "\n" +
            "            border-top: 4px solid #9373EE;\n" +
            "            padding: 24px 24px 40px;\n" +
            "            border-radius:0 0 8px 8px;\n" +
            "            box-shadow: 0px 0px 1px;\n" +
            "        }\n" +
            "\n" +
            "        .title {\n" +
            "            margin: 80px auto 32px;\n" +
            "            font-size: 32px;\n" +
            "            font-weight: 600;\n" +
            "            line-height: 45px;\n" +
            "            letter-spacing: 0px;\n" +
            "\n" +
            "        }\n" +
            "\n" +
            "        .note {\n" +
            "            margin: 0 auto;\n" +
            "            font-size: 18px;\n" +
            "            line-height: 1.4;\n" +
            "            left: 0px;\n" +
            "            top: 77px;\n" +
            "            font-weight: 400;\n" +
            "        }\n" +
            "\n" +
            "        .code {\n" +
            "            padding: 16px;\n" +
            "            text-align: center;\n" +
            "            background: rgba(147, 115, 238, 0.04);\n" +
            "            border-radius: 4px;\n" +
            "            font-weight: 600;\n" +
            "            font-size: 24px;\n" +
            "            line-height: 140%;\n" +
            "            color: #9373EE;\n" +
            "            margin: 24px 0;\n" +
            "            letter-spacing: 1px;\n" +
            "        }\n" +
            "\n" +
            "        .claim ul {\n" +
            "            margin-top: 34px;\n" +
            "            margin-bottom: 40px;\n" +
            "            font-size: 13px;\n" +
            "            line-height: 1.6;\n" +
            "            color: #5c5c5c;\n" +
            "            padding: 25px 0;\n" +
            "\n" +
            "        }\n" +
            "\n" +
            "        .claim ul li {\n" +
            "            color: rgba(24, 24, 25, 0.42);\n" +
            "            line-height: 30px;\n" +
            "        }\n" +
            "\n" +
            "        .footer {\n" +
            "            font-size: 13px;\n" +
            "            line-height: 1.6;\n" +
            "            color: #5c5c5c;\n" +
            "            padding: 25px 0\n" +
            "        }\n" +
            "        .title,.note,.claim,.footer {\n" +
            "            text-align: center;\n" +
            "        }\n" +
            "    </style>\n" +
            "</head>\n" +
            "<body>\n" +
            "<div class=\"main\">\n" +
            "    <div class=\"title\">博客 邮箱账号验证码</div>\n" +
            "    <div class=\"note\">你正在进行邮箱验证操作,验证码为:</div>\n" +
            "    <div class=\"code\" :data=\"123456\">1EM456</div>\n" +
            "\n" +
            "    <div class=\"claim\">\n" +
            "        <ul style=\"list-style: none;\">\n" +
            "            <li style=\"list-style: none;\">此验证码 15 分钟内有效</li>\n" +
            "            <li style=\"list-style: none;\">如非本人操作</li>\n" +
            "            <li style=\"list-style: none;\">转给他人将导致账号被盗和个人信息泄漏,谨防诈骗</li>\n" +
            "        </ul>\n" +
            "    </div>\n" +
            "\n" +
            "    <div class=\"footer\">\n" +
            "        <a href=\"https://blog.csdn.net/qq_62254095?spm=1018.2226.3001.5343\" target=\"_blank\" style=\"color: #9373EE; text-decoration: none;\">个人博客</a> - 记录学习的每一分钟\n" +
            "    </div>\n" +
            "</div>\n" +
            "</body>\n" +
            "</html>";
    public static void main(String [] args)
    {

        // 收件人电子邮箱
        String to = "XXX@qq.com";

        // 发件人电子邮箱
        String from = "XXX@qq.com";
		
        // 生成的授权码
        String password = "XXXX";

        // 指定发送邮件的主机为 smtp.qq.com
        String host = "smtp.qq.com";  //QQ 邮件服务器

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);

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

        // 获取默认的 Session 对象。
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(from, password); //发件人邮件用户名、授权码
            }
        });
		
         // 设置debug模式便于调试:
    session.setDebug(true);

        try{
            // 创建默认的 MimeMessage 对象。
            MimeMessage message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(from));

            // Set To: 头部头字段
            message.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(to));

            // Set Subject: 头字段
            message.setSubject("HTML邮箱验证码2","UTF-8");

            // 发送 HTML 消息, 可以插入html标签

            String generatedCode = "B12ACD";   // 假设后台生成的验证码
            String emailBody = vericodeHtml.replace(":data=\"123456\"", ":data=\"" + generatedCode + "\"").replace("1EM456", generatedCode); //将发送页面的验证码改为后台生成的验证码

            message.setText(emailBody, "UTF-8", "html");

            // 发送消息
            Transport.send(message);
            System.out.println("Sent message successfully....");
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

**建议:**可以生成一个类专门用来存放String类型的HTML模板,需要用时再导入,这样比较优雅( ̄︶ ̄)↗

3.3 效果图

Java发送(QQ)邮箱、验证码发送,Java基础,java,开发语言,程序人生,windows,信息与通信

4、发送带有附件的 E-mail

要在电子邮件中携带附件,我们就不能直接调用message.setText()方法,而是要构造一个Multipart对象:

Multipart multipart = new MimeMultipart();
// 添加text:
BodyPart textpart = new MimeBodyPart();
textpart.setContent(body, "text/html;charset=utf-8");
multipart.addBodyPart(textpart);
// 添加image:
BodyPart imagepart = new MimeBodyPart();
imagepart.setFileName(fileName);
imagepart.setDataHandler(new DataHandler(new ByteArrayDataSource(input, "application/octet-stream")));
multipart.addBodyPart(imagepart);
// 设置邮件内容为multipart:
message.setContent(multipart);

一个Multipart对象可以添加若干个BodyPart,其中第一个BodyPart是文本,即邮件正文,后面的BodyPart是附件。BodyPart依靠setContent()决定添加的内容。

  • 如果添加文本,、

    setContent("...","text/plain;charset=utf-8")添加纯文本,

    或者用setContent("...","text/html;charset=utf-8")添加HTML文本。

  • 如果添加附件,

    需要设置文件名(不一定和真实文件名一致),并且添加一个DataHandler(),传入文件的MIME类型。二进制文件可以用application/octet-stream,Word文档则是application/msword

最后,通过setContent()Multipart添加到Message中,即可发送。

4.1 完整写法

// 文件名 SendFileEmail.java
import java.io.File;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;


public class SendFileEmail {
    public static void main(String[] args) {

        // 收件人电子邮箱
        String to = "XXX@qq.com";

        // 发件人电子邮箱
        String from = "XXX@qq.com";

        String password = "*****";

        // 指定发送邮件的主机为 smtp.qq.com
        String host = "smtp.qq.com";  //QQ 邮件服务器

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);

        properties.put("mail.smtp.auth", "true");
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(from, password); //发件人邮件用户名、授权码
            }
        });
        session.setDebug(true);
        try {
            // 创建默认的 MimeMessage 对象。
            MimeMessage message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(from));

            // Set To: 头部头字段
            message.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(to));

            // Set Subject: 头字段
            message.setSubject("附件发送");

            // 创建消息部分
            MimeBodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setContent("<h2>Hello</h2>这是一封带有附件的<a>Javamail</a>邮箱", "text/html;charset=utf-8");

            // 创建附件部分
            MimeBodyPart attachmentPart = new MimeBodyPart();

            // 使用绝对路径查找文件,直接从项目名开始
            String filePath =  "java-email/src/kun.jpg";
            File file = new File(filePath);
            FileDataSource fds = new FileDataSource(file);
            attachmentPart.setDataHandler(new DataHandler(fds));
            //attachmentPart.setDataHandler(new DataHandler(new ByteArrayDataSource(input, "application/octet-stream")));
            attachmentPart.setFileName(file.getName());

            // 创建多部分消息
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart);
            multipart.addBodyPart(attachmentPart);


           
            // 设置邮件内容为multipart:
            message.setContent(multipart);

            //   发送消息
            Transport.send(message);
            System.out.println("Sent message successfully....");

        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

4.2 效果图

Java发送(QQ)邮箱、验证码发送,Java基础,java,开发语言,程序人生,windows,信息与通信

4.3 目录结构

Java发送(QQ)邮箱、验证码发送,Java基础,java,开发语言,程序人生,windows,信息与通信

注意:

  • Maven项目也跟上面相差不大,也可以自己写个工具类简化开发,或者找其他人写好的

  • 发送附件时使用绝对路径,是因为我在使用相对路径是有些错误,找不到文件,不清楚为什么

  • 有知道的大神可以评论给出答案🙂,也欢迎各位找错补充👍文章来源地址https://www.toymoban.com/news/detail-702721.html

到了这里,关于Java发送(QQ)邮箱、验证码发送的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java发送邮箱】spring boot 发送邮箱

    打开网页版的QQ邮箱, 登录邮箱,进入设置-》帐户 然后,在“帐户”设置中,找到服务设置项,进行设置,如下: 开启POP3/SMTP服务器,验证密保   用正确的手机好发送正确的验证内容到指定的号码,成功获取授权码

    2024年01月23日
    浏览(58)
  • Linux通过QQ邮箱账号使用mailx发送邮件

      打开QQ邮箱的“设置”——“账号”,如下:   点击此处的“管理服务”,即可申请邮箱的授权码。   编辑mail的配置文件:   在 mail.rc 最下方添加如下代码:   创建证书路径   创建qq.crt   设置qq.crt   进入/root/.certs/目录   继续设置

    2024年02月08日
    浏览(50)
  • python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件

    目录 发送邮件 1、准备工作: 2、发送纯文本信息内容: 3、发送 HTML 格式的内容: 4、发送带附件的邮件: 5、群发(一个邮件,发给多个人):         以下都 以 QQ邮箱 为发送方举例;   1、准备工作:          使用 QQ邮箱发送邮件,需要到 “ 设置 ”=“ 账号 ”

    2024年02月09日
    浏览(52)
  • Java:正则表达式书写规则及相关案例:检验QQ号码,校验手机号码,邮箱格式,当前时间

    目标:体验一下使用正则表达式来校验数据格式的合法性。 需求:校验QQ号码是否正确,要求全部是数字,长度是(6-20)之间,不能以0开头

    2024年02月12日
    浏览(67)
  • Java使用正则表达式-验证邮箱

    正则表达式通常被用于判断语句中,用来检查某一个字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串。 几种常用的正则表达式元字符: . 代表任意一个字符 \\\\d 代表0-9的如何一个数字 \\\\D 代表任何一个非数字字符 \\\\s 代表空白字符 如\\\'t\\\'、\\\'n\\\' \\\\S 代表

    2024年02月08日
    浏览(46)
  • java发送邮件(注:本章以163邮箱为例)

    目录 前言 一邮件服务器与传输协议 二.发送邮件思路 2.1注册163邮箱: 2.2、打开邮箱服务获取授权码 三.代码实现邮件发送 3.1第三方jar包 3.2创建邮件工具类 3.3编写测试类 电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自

    2024年01月18日
    浏览(50)
  • facenet, dlib人脸识别,人体检测,云数据库mysql,QQ邮箱,手机验证码,语音播报

    目录 部分代码展示:  录入部分 识别部分​编辑  活体检测部分​编辑  同步到云数据库MySQL  其他操作 部分图片展示: 完整代码加ui链接: 涉及到的一些知识点的文章  活体检测超过三次的人员禁止识别(后面可通过管理员接触) 管理员登录和人脸录入需要手机验证码,

    2024年02月08日
    浏览(78)
  • 使用邮箱发送验证码前端完成登录

    在前一篇使用C#发送邮箱验证码已经完成使用.net core web api写了完成往登录邮箱发送验证码的接口。现在就用前端调用接口模拟登录功能。 前端使用是layui样式+Vue写的功能。 记得把 div id = \\\"app\\\"/div 把前端样式包含 右侧那验证码是缓存中的验证码,一般是看不见的。 前端调用

    2024年01月19日
    浏览(63)
  • 个人商城系统开源(发送邮箱验证码!)

    原文地址:个人商城系统开源(发送邮箱验证码!) - Pleasure的博客 下面是正文内容: 由于近期实在没有什么话题可写和一些有趣的项目教程可以分享。所以我只能决定将我自己亲手编写的一个迷你迷你商城系统进行开源。 也就是放在我博客右边的“我的另一个网站”(由

    2024年03月08日
    浏览(52)
  • QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid

    QQ 邮箱使用 SMTP 发送邮件报错: 550 The From header is missing or invalid : 源码( pthon 3.12 ) 看到 QQ 邮箱对 header 中的 from 有合法性校验,我们的字段格式符合要求,怀疑是字符编码问题。 通过打印封装的 message 查看我们的 From 字段乱码,去掉 utf-8 编码。 再次测试,正常发送邮件

    2024年04月16日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包