使用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




