Javaが正しく動作していることを明確にしてください。問題はプログラマにあります!JavaMail MimeBodyPartがMimeMultipartに「正しく」追加されていない
電子メールに添付ファイルを3つ追加する必要があります(1つのzip、1 png、1 jpeg)。最初は、各アイテムを自分のものに追加できるコードを書いています。次に、3つのアイテムをすべて同時に追加するには、同じコードを(非常に小さな変更を加えて)とり、それをforループに入れてください。これは私が問題を抱えているところです。ループは3つの添付ファイルを電子メールに追加しますが、問題はすべての添付ファイルが同じ同一の添付ファイルであることです。具体的には、forループの最初の2回の反復でアタッチされる最初の2つのアタッチメントは接続されず、3番目のアタッチメント(3回目の反復でバットまでのアタッチメント)が3回アタッチされます。
私はJavaのドキュメントを読みました。私はあらゆる種類の変更を試みましたが、どこが間違っているのか分かりにくいです。現実には、私は前進する十分なプログラミング能力を持っていないということです。私は立ち往生している。どんなアドバイスも大歓迎です!私はクラスのほとんどを添付しましたが、本当の問題はforループの中にあります。なぜ3つの固有のオブジェクトがすべて添付されていないのですか?
ありがとうございます。
try
{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(userLogin));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(primaryRecipient));
MimeBodyPart bodyPart = new MimeBodyPart(); //container to hold the email contents (body only - the text)
bodyPart.setText(emailBody);
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart);
MimeBodyPart mimePart = new MimeBodyPart();
String filename; //hold the current path
FileDataSource resource;//object to grab the physical resource
for(int i = 0; i < itemsToAttach.length; i++)
{
filename = itemsToAttach[i];
System.out.println("Test: " + itemsToAttach[i]);//#############################test only
resource = new FileDataSource(filename);
mimePart.setDataHandler(new DataHandler(resource));
mimePart.setFileName(filename);//###########fix the long ugly name
multipart.addBodyPart(mimePart);
System.out.println("multipart contents: " + multipart.toString());
}
message.setContent(multipart);
message.setSubject(emailSubject);
Transport.send(message);
System.out.println("Sent message successfully....");
}
catch (MessagingException e)
{
throw new RuntimeException(e);
}
出力は次のようになります。
The file is present!
Sending cc to: [email protected]
Sending bcc to: [email protected]
Test: C:\Users\Mike\workspace\Z_ToTransfer\Assig4_SendEmails\part2_send_email_with_attachment\attachments\test attachments.zip
multipart contents: [email protected]
Test: C:\Users\Mike\workspace\Z_ToTransfer\Assig4_SendEmails\part2_send_email_with_attachment\attachments\axiom.jpeg
multipart contents: [email protected]
Test: C:\Users\Mike\workspace\Z_ToTransfer\Assig4_SendEmails\part2_send_email_with_attachment\attachments\another attachment.png
multipart contents: [email protected]
Sent message successfully....
'MimePart内=新しいMimeBodyPart();はforループの一部でなければなりません。ループが繰り返されるたびに同じオブジェクトを「再構成」しながら、同じオブジェクトを3回追加します。 –
@ArnoMittelbachあなたは完全に正しいです!理解していただきありがとうございます。とても有難い! – Mike