내 응용 프로그램에서 전자 메일을 보내도록 관리하기 위해 작성한 MailMessage 클래스가 있습니다. 그것은 일반 텍스트 메시지에 대해 잘 작동하고, 컴파일 및 명령 줄에서 수동으로 실행할 때 첨부 논리가 작동하지만 Glassfish 3.1 내에서 실행할 때 내 첨부 파일을 포함하는 데 실패합니다. CLASSPATH 환경을 설정하여 명령 줄에서 clobbering하는 미묘한 클래스 로딩 문제가 있다고 가정하고 있지만 변경해야하는 응용 프로그램 서버 설정을 파악할 수 없었습니다. 내가 디버깅이 가능, 내 서블릿에서 호출하는 방법에이 기능을 변경하는 경우전자 메일 첨부 파일이 Glassfish에 포함되어 있지 않음
public static void main(String[] args) throws Exception {
String[] toAddr = new String[] {"[email protected]"};
String subject = "This is a test";
String data = "This is a message body";
MailMessage mailMessage = new MailMessage(toAddr, subject, data);
mailMessage.addAttachment(new File("/etc/hosts"), "text/plain");
mailMessage.send();
}
는, 결과 메일 메시지는 다음과 같습니다 : 다음 명령 줄에서 실행할 때 내 메일 메시지를 작성하고 보낼 때 사용하는 코드는 : 나는 명령 행에서 동일한 코드를 실행할 때 비교하여
[#|2011-11-17T11:21:37.710-0500|INFO|glassfish3.1|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=105;_ThreadName=Thread-1;|Date: Thu, 17 Nov 2011 11:21:37 -0500 (EST)
From: [email protected]
To: [email protected]
Message-ID: <9116840.7.1321546897580.JavaMail...>
Subject: This is a test
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_6_16232037.1321546897569"
.
|#]
은, 그것은 별도의 메시지 경계와 첨부 파일의 모든 각을 보여줍니다. 이 모든 코드는 다시
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
InternetAddress[] addresses = new InternetAddress[mailTo.length];
for (int i = 0; i < mailTo.length; i++)
addresses[i] = new InternetAddress(mailTo[i]);
message.setRecipients(Message.RecipientType.TO, addresses);
message.setSubject(subject);
message.setSentDate(new Date());
Multipart multipart = buildMultipartMessage(messageBody.toString());
message.setContent(multipart);
: 내은 MailMessage 클래스에 의해 다음과 같이 전화를 사용
private Multipart buildMultipartMessage(String messageBody)
throws MessagingException {
MimeBodyPart messagePart = new MimeBodyPart();
messagePart.setText(messageBody.toString());
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messagePart);
// Attach each of our files
for (File part : attachment.keySet()) {
BodyPart attachmentPart = new MimeBodyPart();
attachmentPart.setDataHandler(new DataHandler(new FileDataSource(part)));
attachmentPart.setFileName(part.getName() + ".txt");
attachmentPart.setHeader("Content-Type", attachment.get(part));
attachmentPart.setHeader("Content-ID", part.getName());
attachmentPart.setDisposition(Part.ATTACHMENT);
multipart.addBodyPart(attachmentPart);
}
return multipart;
}
: 이것은 기본 MimeMessage의에 나는 첨부 파일을 추가하기 위해 사용하고 기능입니다 정확히 동일하게 컴파일하고 실행하며 명령 줄에서 실행할 때 첨부 파일이있는 유효한 전자 메일을 생성합니다. 글래스 피쉬에서 똑같은 일을 할 때 나는 비어있는 메시지를받습니다.
이 문제를 진단하는 방법에 대한 제안 사항이 있으면 알려 주시면 감사하겠습니다.
스티브
UPDATE :
내가 buildMultipartMessage()를 호출 한 후이 코드를 추가 할 수 있지만 message.setContent (다중)하기 전에, 나는 내용이 정확한지 확인할 수있는 경우 :
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/var/tmp/stf"));
multipart.writeTo(bos);
bos.close();
} catch (Exception ex) { }
/var/tmp/stf 파일에는 첨부 파일과 구분 기호가있는 전체 메시지 본문이 들어 있습니다. 나는 이것이 명령 행에서 왜 작동하는지에 대해서는 여전히 혼란 스럽지만 Glassfish에서는 그렇지 못하다. 그러나 정보는 문제를 해결하는데 유용 할 수있다.