Java 实现 SMTP 协议调用的详细示例及实战指南 SMTP Java 调用示例

简介: 本文介绍了如何使用Java调用SMTP协议发送邮件,涵盖SMTP基本概念、JavaMail API配置、代码实现及注意事项,适合Java开发者快速掌握邮件发送功能集成。

SMTP之Java调用示例

一、引言

SMTP(简单邮件传输协议)是用于发送电子邮件的标准协议。在Java中,可以使用JavaMail API来调用SMTP协议实现邮件发送功能,方便地在应用程序中集成邮件发送模块,如用于发送注册确认邮件、密码重置邮件等场景。

二、准备工作

(一)开启邮箱SMTP服务

需要一个能收发邮件的邮箱帐号,常见的QQ邮箱、163邮箱等都支持SMTP服务。在邮箱设置中找到开启SMTP服务的选项并开启,部分邮箱开启后会生成授权码,后续代码中需使用授权码代替邮箱密码进行登录认证。

(二)添加依赖

如果使用Maven项目,可在pom.xml中添加JavaMail相关依赖:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.6.2</version>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

三、技术方案

(一)创建参数配置

通过Properties对象设置连接邮件服务器的相关参数。主要参数包括:

  • mail.transport.protocol:指定使用的协议为smtp
  • mail.smtp.host:设置SMTP服务器地址,如QQ邮箱的smtp.qq.com,163邮箱的smtp.163.com
  • mail.smtp.port:设置端口号,非SSL连接一般默认为25,SSL连接下QQ邮箱常用465或587,163邮箱常用465。
  • mail.smtp.auth:设置是否需要用户认证,值为true表示需要认证。
  • 若使用SSL加密,还需设置mail.smtp.socketFactory.classjavax.net.ssl.SSLSocketFactory等相关参数。

(二)创建会话对象

根据上述配置创建Session对象,用于和邮件服务器交互。可以通过Session.getInstance(props, authenticator)方法创建,其中props是前面设置的参数对象,authenticator是用于身份验证的对象,可传入邮箱用户名和密码(或授权码)进行认证。

(三)创建邮件对象

使用MimeMessage类创建邮件对象,并设置邮件的相关信息,如发件人、收件人、主题、内容等。例如:

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(senderEmail));// 设置发件人邮箱
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(receiverEmail));// 设置收件人邮箱
message.setSubject(subject);// 设置邮件主题
message.setText(content);// 设置邮件文本内容

(四)发送邮件

通过Transport类发送邮件。先从Session中获取Transport对象,然后使用transport.connect(username, password)方法连接邮件服务器,最后调用transport.sendMessage(message, message.getAllRecipients())发送邮件,发送完成后调用transport.close()关闭连接。

四、应用实例

以下是一个完整的Java发送简单文本邮件的示例代码:

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

public class MailSender {
   
    public void sendEmail(String to, String subject, String body) {
   
        final String username = "your_email@qq.com";// 发件人邮箱
        final String password = "your_auth_code";// 邮箱授权码
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", "smtp.qq.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.starttls.enable", "true");

        Session session = Session.getInstance(props, new Authenticator() {
   
            protected PasswordAuthentication getPasswordAuthentication() {
   
                return new PasswordAuthentication(username, password);
            }
        });

        try {
   
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(username));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            message.setSubject(subject);
            message.setText(body);
            Transport.send(message);
            System.out.println("Email sent successfully!");
        } catch (Exception e) {
   
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
   
        MailSender sender = new MailSender();
        sender.sendEmail("recipient@example.com", "测试邮件", "这是一封测试邮件内容。");
    }
}

上述代码中,sendEmail方法实现了邮件发送功能,在main方法中调用该方法,传入收件人邮箱、邮件主题和内容,即可发送一封简单的文本邮件。

如果要发送带附件或内嵌图片的邮件,需要进一步构造Multipart对象来处理邮件内容,将文本、附件、图片等不同部分组合到邮件中,具体可参考相关JavaMail文档和示例。

五、注意事项

  • 确保邮箱已开启SMTP服务,否则会连接失败。
  • 注意邮箱密码或授权码的正确性,若使用授权码,需使用邮箱设置中生成的对应授权码,而不是邮箱登录密码。
  • 部分邮箱服务器要求SMTP连接使用SSL或TLS安全认证,需正确配置相关参数,若连接失败,可查看控制台日志,根据错误提示调整配置。
  • 避免频繁发送邮件,否则可能会被邮件服务器拒绝服务。

Java 实现 SMTP,SMTP 协议调用,Java 调用示例,SMTP 详细示例,Java 实战指南,SMTP Java 调用,Java 邮件开发,SMTP 协议实现,Java 示例教程,SMTP 调用方法,Java SMTP 实战,SMTP 协议教程,Java 邮件发送,SMTP 实现示例,Java 协议调用



代码获取方式
https://pan.quark.cn/s/14fcf913bae6


相关文章
|
3月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
405 5
|
3月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
3月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
298 119
|
4月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
1656 8
|
4月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
594 3
|
4月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
463 0
|
4月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
780 12
|
4月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
499 100
|
4月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
507 0