Java 发送邮件示例

本文涉及的产品
对象存储 OSS,20GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
对象存储 OSS,内容安全 1000次 1年
简介: 本示例展示了如何使用Java编程语言发送电子邮件。通过利用JavaMail API,这段代码实现了从配置SMTP服务器,设置邮件属性,到发送邮件的全过程,为开发者提供了实用的参考。

在Java中发送邮件通常使用JavaMail API,允许开发者轻松地构造和发送邮件。下面是一个使用JavaMail API的简单示例,演示如何发送电子邮件。

1. 添加依赖

如果您使用Maven管理您的项目,请在pom.xml中添加JavaMail API的依赖:

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

确保还添加了Java Activation Framework(JAF)的依赖:

<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.2.0</version>
</dependency>

如果您不使用Maven,可以从JavaMail GitHub页面下载相关的JAR包并添加到项目的构建路径中。

2. 发送邮件示例代码

以下是一个完整的示例代码,演示如何使用JavaMail发送邮件:

import java.util.Properties;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;

public class SendEmailExample {
   
    public static void main(String[] args) {
   
        // 发件人邮箱地址和密码
        final String fromEmail = "your_email@example.com"; // Sender's email
        final String password = "your_password"; // Sender's password
        // 收件人邮箱地址
        String toEmail = "recipient_email@example.com"; // Receiver's email

        // 1. 设置邮件服务器属性
        Properties properties = new Properties();
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true"); // 使用TLS
        properties.put("mail.smtp.host", "smtp.example.com"); // SMTP服务器地址
        properties.put("mail.smtp.port", "587"); // SMTP端口

        // 2. 创建会话
        Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
   
            protected PasswordAuthentication getPasswordAuthentication() {
   
                return new PasswordAuthentication(fromEmail, password);
            }
        });

        try {
   
            // 3. 创建邮件消息
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(fromEmail));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));
            message.setSubject("测试邮件主题");

            // 4. 创建邮件正文
            MimeBodyPart mimeBodyPart = new MimeBodyPart();
            mimeBodyPart.setContent("这是邮件正文内容", "text/html"); // 可以使用HTML格式

            Multipart multipart = new javax.mail.internet.MimeMultipart();
            multipart.addBodyPart(mimeBodyPart);

            message.setContent(multipart);

            // 5. 发送邮件
            Transport.send(message);
            System.out.println("邮件发送成功");

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

3. 代码说明

  • 邮件服务器属性:设置SMTP服务器的相关参数,如hostportauth等。请根据您使用的邮件服务提供商调整这些参数,例如对于Gmail,smtp.gmail.com和端口587
  • 会话创建:使用认证信息(发件人邮箱和密码)创建会话。
  • 邮件消息:创建MimeMessage对象,并设置发件人、收件人和主题等信息。
  • 邮件正文:创建MimeBodyPart对象用于设置邮件内容,可以是纯文本或HTML格式。
  • 发送邮件:使用Transport.send()发送邮件。

注意事项

  • 安全性:请注意不要在生产代码中直接硬编码密码、邮箱等敏感信息,可以考虑使用环境变量或安全配置文件。
  • TLS/SSL设置:确保SMTP服务器支持TLS/SSL,并根据需要进行配置。
  • 允许低安全性应用访问:如果您使用Gmail等服务发送邮件,可能需要允许低安全性应用访问或生成应用专用密码。
相关文章
|
2月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
79 1
|
3月前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
56 1
|
2月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
92 38
|
5月前
|
存储 Java API
【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
|
3月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
95 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
3月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
60 9
|
3月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
32 1
|
4月前
|
JavaScript 前端开发 Java
Java 8 新特性详解及应用示例
Java 8 新特性详解及应用示例
103 3
|
5月前
|
JSON Java API
【Azure API 管理】通过Java APIM SDK创建一个新的API,如何为Reqeust的Representation设置一个内容示例(Sample)?
【Azure API 管理】通过Java APIM SDK创建一个新的API,如何为Reqeust的Representation设置一个内容示例(Sample)?
|
11天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者