複数の部分を含むメールを送信するための次のコードがあります
public void sendEmail(String emailAddress, List<String> attachment) throws Exception{
Properties props = new Properties();
props.put("mail.transport.protocol", "smtps");
props.put("mail.smtps.host", SMTP_HOST_NAME);
props.put("mail.smtps.auth", "true");
Session mailSession = Session.getDefaultInstance(props);
mailSession.setDebug(true);
Transport transport = mailSession.getTransport();
MimeMessage message = new MimeMessage(mailSession);
// message subject
message.setSubject("Automated email from Kieran Herley about Assignments");
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(emailAddress));
Multipart multipart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();
// message body
messageBodyPart.setText("This is just a message to say your assignment has been graded.\nAttached is a file with some pointers about your assignment");
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
for (String singleFile : attachment) {
DataSource source = new FileDataSource(singleFile);
messageBodyPart.setDataHandler(new DataHandler(source));
String nameOfFile = singleFile.substring(singleFile.lastIndexOf('\\') + 1);
messageBodyPart.setFileName(nameOfFile);
multipart.addBodyPart(messageBodyPart);
}
message.setContent(multipart);
transport.connect(SMTP_HOST_NAME, SMTP_HOST_PORT, SMTP_AUTH_USER, SMTP_AUTH_PWD);
transport.sendMessage(message,
message.getRecipients(Message.RecipientType.TO));
transport.close();
}
すべてが正常に機能していますが、私が抱えている問題はforループにあります
for (String singleFile : attachment) {
DataSource source = new FileDataSource(singleFile);
messageBodyPart.setDataHandler(new DataHandler(source));
String nameOfFile = singleFile.substring(singleFile.lastIndexOf('\\') + 1);
messageBodyPart.setFileName(nameOfFile);
multipart.addBodyPart(messageBodyPart);
}
message.setContent(multipart);
私が抱えている問題は、アプリケーションがforループを3回ループすると、電子メールに添付されているすべてのファイルに、3回目にループを通過したファイルの名前が付けられることです。これは、電子メールの添付ファイル自体と同じです。3つの添付ファイルを送信している場合でも、すべて同じ名前が付けられます。
これは、3つの添付ファイルすべてが同じ変数を使用して名前を付けて取得するため、3つすべてについて名前を付け、ループを通過した最後の添付ファイルとして設定しているためです。
すべてに同じ名前変数と添付ファイル変数を使用して各電子メールの名前と添付ファイルを設定する方法はありますか、またはこれを行うにはどうすればよいですか?
この場合、
String singleFile --- for the attachment
String nameOfFile --- for the name of each file