You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Java Mail发送对象数组 相关代码实现技术问询

使用Java Mail发送包含对象数组的邮件实现方案

我来帮你完善这个Java Mail发送对象数组的实现,咱们一步步拆解并完成代码:

首先,咱们得把实体类和邮件发送逻辑分开,原代码里SendMailTLS继承Customer其实没必要,先单独定义Customer实体类,用来封装我们要发送的对象数据:

public class Customer {
    private String firstName;
    private String lastName;
    private String email;
    // 可根据业务需求添加更多属性

    // 构造器、getter方法
    public Customer(String firstName, String lastName, String email) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getEmail() {
        return email;
    }
}

接下来,完善SendMailTLS类,实现发送包含Customer对象数组的邮件逻辑。我们会把数组里的每个客户信息格式化成清晰的邮件内容(这里用HTML格式让内容更易读),同时配置Java Mail的TLS连接参数:

import java.util.Properties;
import javax.mail.Message;
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;

public class SendMailTLS {

    // 发送包含Customer数组的邮件方法
    public void sendCustomerArrayEmail(Customer[] customers) {
        // 邮箱配置参数(以Gmail为例,其他邮箱替换对应SMTP地址和端口)
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密

        // 发件人账号信息(Gmail开启两步验证需使用App密码)
        final String username = "your-email@gmail.com";
        final String password = "your-app-password-or-email-password";

        // 创建邮件会话
        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                });

        try {
            // 创建MIME邮件对象
            Message message = new MimeMessage(session);
            // 设置发件人
            message.setFrom(new InternetAddress(username));
            // 设置收件人(支持多个收件人,用逗号分隔)
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("recipient-email@example.com"));
            // 设置邮件主题
            message.setSubject("客户列表信息");

            // 把Customer数组转换成HTML格式的邮件内容
            StringBuilder emailContent = new StringBuilder();
            emailContent.append("<html><body><h3>客户列表</h3><ul>");
            for (Customer customer : customers) {
                emailContent.append("<li>")
                        .append("姓名: ").append(customer.getFirstName()).append(" ").append(customer.getLastName())
                        .append("<br>邮箱: ").append(customer.getEmail())
                        .append("</li>");
            }
            emailContent.append("</ul></body></html>");

            // 设置邮件内容为HTML格式
            message.setContent(emailContent.toString(), "text/html; charset=utf-8");

            // 发送邮件
            Transport.send(message);

            System.out.println("邮件发送成功!");

        } catch (MessagingException e) {
            throw new RuntimeException("邮件发送失败", e);
        }
    }

    // 测试入口
    public static void main(String[] args) {
        // 构造测试用的Customer对象数组
        Customer[] testCustomers = {
                new Customer("John", "Doe", "john.doe@example.com"),
                new Customer("Jane", "Smith", "jane.smith@example.com")
        };

        SendMailTLS mailSender = new SendMailTLS();
        mailSender.sendCustomerArrayEmail(testCustomers);
    }
}

关键注意事项:

  • 依赖配置:如果是Maven项目,需要添加Java Mail的依赖(版本可根据需求调整):
    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.6.2</version>
    </dependency>
    
  • 邮箱权限:不同邮箱的SMTP配置不同,比如QQ邮箱SMTP地址是smtp.qq.com,端口587;Gmail开启两步验证后必须使用App密码,未开启则需允许低权限应用访问(不推荐)。
  • 内容格式:如果不需要HTML格式,可将setContent的第二个参数改为"text/plain; charset=utf-8",同时把内容拼接成纯文本格式即可。

内容的提问来源于stack exchange,提问作者Christian Posada

火山引擎 最新活动