首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SMTP 协议 Java 调用完整示例及步骤详解 SMTP Java 调用示例教程

SMTP 协议 Java 调用完整示例及步骤详解 SMTP Java 调用示例教程

原创
作者头像
啦啦啦191
发布2025-07-26 18:03:33
发布2025-07-26 18:03:33
2180
举报
文章被收录于专栏:Java开发Java开发

SMTP之Java调用示例

一、引言

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

二、准备工作

(一)开启邮箱SMTP服务

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

(二)添加依赖

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

代码语言:xml
复制
<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类创建邮件对象,并设置邮件的相关信息,如发件人、收件人、主题、内容等。例如:

代码语言:java
复制
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发送简单文本邮件的示例代码:

代码语言: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安全认证,需正确配置相关参数,若连接失败,可查看控制台日志,根据错误提示调整配置。
  • 避免频繁发送邮件,否则可能会被邮件服务器拒绝服务。

SMTP 协议,Java 调用 SMTP,SMTP 调用示例,Java 邮件开发,SMTP 使用教程,Java SMTP 示例,SMTP 协议详解,Java 发送邮件,SMTP 调用步骤,Java 邮件示例,SMTP 开发教程,Java SMTP 实现,SMTP 协议使用,Java 调用邮件协议,SMTP 示例教程

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SMTP之Java调用示例
    • 一、引言
    • 二、准备工作
      • (一)开启邮箱SMTP服务
      • (二)添加依赖
    • 三、技术方案
      • (一)创建参数配置
      • (二)创建会话对象
      • (三)创建邮件对象
      • (四)发送邮件
    • 四、应用实例
    • 五、注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档