javamail批量发送邮件能不用for循环吗
时间: 2023-07-09 08:44:30 浏览: 97
javamail批量发送邮件
批量发送邮件时,需要将每个收件人的信息(如收件人地址、主题、内容等)填入邮件对象中,因此使用循环是比较常见的做法。但是如果你不想使用 for 循环,也可以使用 Java 8 的 Stream API 来实现。
下面是一个使用 Stream API 实现批量发送邮件的示例代码:
```
import java.util.*;
import java.util.stream.*;
import javax.mail.*;
import javax.mail.internet.*;
public class MailSender {
public static void main(String[] args) throws Exception {
String host = "smtp.example.com";
String username = "your_username";
String password = "your_password";
String from = "your_email@example.com";
String subject = "Test Email";
String body = "This is a test email.";
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
List<String> toList = new ArrayList<String>();
toList.add("recipient1@example.com");
toList.add("recipient2@example.com");
toList.add("recipient3@example.com");
List<Message> messageList = toList.stream()
.map(to -> {
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject(subject);
message.setText(body);
return message;
} catch (Exception e) {
throw new RuntimeException(e);
}
})
.collect(Collectors.toList());
Transport transport = session.getTransport("smtp");
transport.connect();
messageList.forEach(message -> {
try {
transport.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
throw new RuntimeException(e);
}
});
transport.close();
}
}
```
在上面的示例代码中,我们使用 `toList.stream().map()` 将收件人列表转换为邮件对象列表。在 `map()` 方法中,我们创建邮件对象并填入相关信息,然后返回邮件对象。最终使用 `Collectors.toList()` 方法将所有邮件对象收集到一个列表中。
在发送邮件时,我们使用 `messageList.forEach()` 方法遍历邮件对象列表,并使用 `Transport.sendMessage()` 方法发送邮件。
阅读全文