Използвам Java на Google App Engine и се опитвам да изпратя имейл с множество прикачени файлове.
Това, което откривам е, че по някаква причина липсва първият прикачен файл. По принцип, ако filesToAttach съдържа 1 файл, тогава няма да има прикачени файлове. Ако filesToAttach съдържа 4 файла - A, B, C и D, тогава съобщението, което идва, ще има прикачени B, C и D. Наистина странно.
Кодът, който използвам, е както по-долу. Всички предложения за това как да се коригира това много се оценяват.
Резултатът, генериран от извикванията на log.info, изглежда показва правилния брой прикачени файлове.
Properties props = new Properties();
Session session = Session.getInstance(props);
Message message = new MimeMessage(session);
String fromEmail = "admin@" + ApiProxy.getCurrentEnvironment().getAppId() + ".appspotmail.com";
message.setFrom(new InternetAddress(fromEmail, "MyApp Admin"));
message.addRecipients(Message.RecipientType.BCC, addresses);
message.setSubject(subject);
MimeMultipart multipart = new MimeMultipart();
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
multipart.addBodyPart(htmlPart);
for(FileToAttach fileToAttach : filesToAttach) {
MimeBodyPart fileMimeBodyPart = new MimeBodyPart();
DataSource dataSource = new ByteArrayDataSource(fileToAttach.getContents(), "application/octet-stream");
fileMimeBodyPart.setDataHandler(new DataHandler(dataSource));
fileMimeBodyPart.setFileName(fileToAttach.getFileName());
log.info("attaching file " + fileToAttach.getFileName() + " of " + fileToAttach.getContents().length + " bytes");
multipart.addBodyPart(fileMimeBodyPart);
}
message.setContent(multipart);
log.info("the multipart contains " + multipart.getCount() + " parts and isComplete = " + multipart.isComplete());
Transport.send(message);
log.info("called Transport.send");
multipart/alternative
, може да има подобен ефект с прикачените файлове. Може би внедряването на JavaMail на App Engine очаква да има частtext/plain
, която да придружава тялотоtext/html
? - person tx802   schedule 27.01.2014fileMimeBodyPart.SetHeader("Content-Type", "image/jpeg")
(или приложение/октет-поток). Но може да е по-елегантно решение да се направи setText и на multipart, ще го пробвам. Благодаря много за предложението - person BenTaylor   schedule 27.01.2014