如何使用Java发邮件

news2024/11/24 9:25:27

首先要知道一点,发送邮件不需要像发送短信那样购买具体的定制化服务,可以理解为发送短信是一个涉及到具体的物理设备,比如基站等这些东西,而邮件的服务成本没有那么高,它是一个比较纯粹的软件服务。

其次你要知道那个邮件服务给你提供了外部调用的SMTP服务,个人写代码一般最好用的是网易邮箱,下面同样用网易邮箱来演示如何发送邮件。

首先登录网易邮箱,在设置中,打开SMTP服务
在这里插入图片描述
网易的相关服务有两个开关,开启一个就行,需要的只是SMTP发邮件的能力
在这里插入图片描述
开启后会有新手引导设置认证秘钥,你要保存好,秘钥只在设置的时候显示一次。
在这里插入图片描述
随后记住网易邮箱的SMTP服务器地址和端口号,这个信息可以在网易邮箱的帮助中心查询STMP找到
在这里插入图片描述
到此需要的信息就准备完毕了,下面就是写一个发邮箱的代码,Java提供了javax.mail.*包,让我们发送邮件。

package com.wy.utils;

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

/**
 * 作者: wangyang <br/>
 * 创建时间: 2023/5/25 <br/>
 * 描述: <br/>
 * &nbsp;&nbsp;&nbsp;&nbsp;EmailUtil  邮件工具类
 */
public class EmailUtil {

    /**
     * 描述: 发送邮件的工具类 <br/>
     * 作者: wangyang <br/>
     * 创建时间: 2023/5/25 <br/>
     * 参数: from-发件人邮箱地址、instruction-发件人的smtp授权指令、to-收件人邮箱地址、smtpAddress-smtp服务器地址
     *        smtpPort-smtp服务器端口号 、smtpSSL-stmp是否采用SSL认证 、subject-发生的内容标题、text-发送的内容正文<br/>
     * 返回值:  <br/>
     */
    public static void sendEmail(String from,String instruction,
                                 String to,String smtpAddress,
                                 String smtpPort,Boolean smtpSSL,
                                 String subject,String text) throws MessagingException {

        // 设置SMTP服务器地址和端口号
        Properties props = new Properties();
        props.put("mail.smtp.host", smtpAddress);
        props.put("mail.smtp.port", smtpPort);
        if (smtpSSL){
            props.put("mail.smtp.auth","true");
            props.put("mail.smtp.ssl.enable","true");
        }

        // 创建Session对象
        Session session = Session.getInstance(props);

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

        // 设置发件人、收件人、主题和正文
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
        message.setSubject(subject);
        message.setContent(text,"text/html;charset=utf-8");
        //代码发送邮件最常用的是html内容,如果只是发送纯粹的文字可以直接使用message.setText(text);

        // 发送邮件
        Transport transport = session.getTransport("smtp");
        transport.connect(smtpAddress, from, instruction);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }

    public static void main(String[] args) throws MessagingException {
        EmailUtil.sendEmail("111111111@163.com","1111111111",
                "111111111","smtp.163.com","465",true,
                "测试","<span style='color:red'>测试</span>");
    }
}

在这里插入图片描述
这就是全部的流程。

最后要提一点,网易邮箱使用STMP服务的时候只需要认证秘钥,不需要你的邮箱密码,但不是所有邮箱提供的STMP服务都是这样,如果你使用的邮箱需要账号密码,就使用下面的代码。

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
public class SendHtmlEmail {
    public static void main(String[] args) {
        // 设置邮件服务器的属性
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.example.com"); // 邮件服务器地址
        properties.put("mail.smtp.port", "587"); // 邮件服务器端口号
        properties.put("mail.smtp.auth", "true"); // 需要身份验证
        properties.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密
 
        // 设置发送者和接收者的邮箱地址
        String senderEmail = "sender@example.com";
        String receiverEmail = "receiver@example.com";
 
        // 设置邮件发送者的用户名和密码
        final String username = "your_username";
        final String password = "your_password";
 
        // 创建会话
        Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
            protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
                return new javax.mail.PasswordAuthentication(username, password);
            }
        });
 
        try {
            // 创建邮件对象
            Message message = new MimeMessage(session);
 
            // 设置发送者和接收者
            message.setFrom(new InternetAddress(senderEmail));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(receiverEmail));
 
            // 设置邮件主题
            message.setSubject("HTML邮件示例");
 
            // 设置邮件内容为HTML格式
            String htmlContent = "<h1>Hello, World!</h1><p>This is a sample HTML email.</p>";
            message.setContent(htmlContent, "text/html");
 
            // 发送邮件
            Transport.send(message);
            System.out.println("邮件已发送。");
 
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion教程(9) - AI视频转动漫

配套抖音视频教程&#xff1a;https://v.douyin.com/UfTcrcJ/ 安装mov2mov插件 打开webui点击扩展->从网址安装输入地址&#xff0c;然后点击安装 https://github.com/Scholar01/sd-webui-mov2mov 最后重启webui 下载模型 从国内liblib AI 模型站下载模型 LiblibAI哩…

从到店到到家,本土便利店正在围猎外资三巨头

全家在中国市场接连关店约300多家&#xff0c;7-11关闭或迁移全球市场的门店约1000家&#xff0c;罗森深圳公司2022年疑似亏损近8000万。 近三年来&#xff0c;以全家、7-11和罗森三家为代表的外资便利店企业&#xff0c;正在遭遇中国本土便利店品牌从到店到家的双重围猎。 20…

分析一下vue3下会造成响应式丢失的情况

前言 在我们从vue2过渡到vue3的时候&#xff0c;对于数据响应式的变化其实是懵懵懂懂的。从以往直接在data函数里面定义变量到每一次都要使用ref/reactive时&#xff0c;是有些不适应的。但问题不大&#xff0c;毕竟在大前端时代中&#xff0c;如果不及时跟上时代的步伐&#…

在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

SDUT 2023 summer team contest(for 22) - 13

B - Hoppers 题意&#xff1a;给你一张无向图&#xff0c;可以选定一个点染色&#xff0c;随后距离为2的点都会被染色(可以传染&#xff09;。求至少需要向图中添加几条边使得选定一个点染色后可以将整个图染色。(不一定是连通图&#xff09; 思路&#xff1a;如果一个连通块是…

代码随想录算法训练营day60

文章目录 Day60 柱状图中最大的矩形题目思路代码 Day60 柱状图中最大的矩形 84. 柱状图中最大的矩形 - 力扣&#xff08;LeetCode&#xff09; 题目 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图…

Learning Rich Features for Image Manipulation Detection阅读笔记

文章目录 Abstract3.3. 双线性池 Abstract 图像篡改检测与传统的语义目标检测&#xff08;semantic object detection&#xff09;不同&#xff0c;因为它更关注篡改伪影&#xff08;tampering artifacts&#xff09;而不是图像内容&#xff0c;这表明需要学习更丰富的特征。我…

【Java】异常处理 之 Java的异常

Java的异常 在计算机程序运行的过程中&#xff0c;总是会出现各种各样的错误。 有一些错误是用户造成的&#xff0c;比如&#xff0c;希望用户输入一个int类型的年龄&#xff0c;但是用户的输入是abc&#xff1a; // 假设用户输入了abc&#xff1a; String s "abc&quo…

UNIX网络编程卷一 学习笔记 第二十七章 IP选项

IPv4允许在20字节的首部固定部分后跟最多共40字节的选项。尽管已经定义了10种IPv4选项&#xff0c;但最常用的是源路径选项。我们可通过存取IP_OPTIONS套接字选项访问这些选项&#xff0c;我们存取该套接字选项时&#xff0c;所用的缓冲区中的值就是它们置于IP数据报中的格式。…

南京https证书中的通配符https证书

随着互联网的快速发展&#xff0c;越来越多的网站开始使用HTTPS协议来保证用户的信息安全和隐私。而HTTPS协议的实现离不开HTTPS证书的支持。HTTPS证书是一种数字证书&#xff0c;用于验证网站的身份并加密数据传输。它通过使用公钥加密技术&#xff0c;确保用户与网站之间的通…

Spotfire相关

文章目录 基础架构服务器基础状态管理服务状态查看overviewserver diagnostic&#xff1a;instance 服务器启停 server配置资源池配置 基础架构 SPF DB 存储&#xff1a;用户权限信息、schedule信息、配置信息、建立的dxp文件 服务器基础状态管理 服务状态查看 overview serv…

C++ 指针函数和函数指针

除了void类型的函数之外&#xff0c;函数在调用结束之后都要有返回值&#xff0c;指针也可以是函数的返回值。当一个函数的返回值是指针类型时&#xff0c;这个函数就是指针型函数。 使用指针型函数的最主要目的就是要在函数结束时把大量的数据从被调函数返回到主调函数中。而通…

判断是否在当前页面事件方法

页面可见性 页面可见性介绍 长期以来我们一直缺少一个判断用户是否正在浏览某个指定标签页的方法。用户是否去看别的网站了&#xff1f;他们切换回来了吗&#xff1f;现在html5里页面可见性接口就提供给了程序员一个方法&#xff0c;让他们使用visibilitychange页面事件来判断…

【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

财报解读:上半年仍在亏损,百济神州烧钱狂飙还能坚持多久?

2023年上半年对于创新药新秀百济神州而言&#xff0c;显然是喜忧参半的。 年初1月份&#xff0c;凭借在与美国本土巨头药品PK中的优秀表现&#xff0c;百济神州拳头产品获得了美国药监局批准&#xff0c;得以覆盖更多的适应症&#xff0c;由此引爆销售增长&#xff1b;而年中6…

【MATLAB第67期】# 源码分享 | 基于MATLAB的morris全局敏感性分析

【MATLAB第67期】# 源码分享 | 基于MATLAB的morris全局敏感性分析 一、代码展示 clear all npoint100;%在分位数超空间中要采样的点数(计算次数iternpoint*(nfac1) nfac20;%研究函数的不确定因素数量 [mu, order] morris_sa1((x)test_function(x), nfac, npoint)for t1:size…

剑指offer56-I.数组中数字出现的次数

这道题我知道要用位运算&#xff0c;想了一下没头绪就直接看题解了&#xff0c;就是所有元素进行异或操作&#xff0c;对于两个操作数的每一位&#xff0c;相同结果为0&#xff0c;不同结果为1&#xff0c;在计算过程中&#xff0c;成对出现的数字的所有位会凉凉抵消为0&#x…

备份容灾哪家好怎么样

数字化时代&#xff0c;数据安全是我们不容忽视的问题。云呐容灾备份系统不仅提供了强大的数据保护功能&#xff0c;而且操作简单&#xff0c;使用方便。无论你是企业管理员&#xff0c;还是个人用户&#xff0c;都可以轻松上手。它还提供了丰富的报告和监控功能&#xff0c;让…

尚品汇总结九:RabbitMQ在项目的应用(面试专用)

项目中的问题 1.搜索与商品服务的问题 商品服务修改了 商品的上架状态,商品就可以被搜索到.采用消息通知,商品服务修改完商品上架状态,发送消息 给 搜索服务,搜索服务消费消息,进行商品数据ES保存.下架也是一样. 2.订单服务取消订单问题 延迟队里 保存订单之后 开始计时,…

每日一题——最小花费爬楼梯

题目 给定一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第i 个台阶向上爬需要支付的费用&#xff0c;下标从0开始。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的…