javamail을 사용하여 gmail (pop3)에서 메일을 읽는 데 문제가 있습니다. 나는 메일이 우분투의 Thnderbird에서 보낸다면 완벽하게 깨달은 코드를 가지고있다. 어떻게 메일이 원래 맥에서 보낸 경우 그것은 실패합니다.Gmail에서 JavaMail 읽기 사용
private static final String UNKNOWN_BRAND_PATH = "UNKNOWN";
public static final String FOLDER_NAME = "INBOX";
private static Logger LOG = org.slf4j.LoggerFactory.getLogger(LzMailRecieverService.class);
@Value("${lz.mail.address}")
private String lzMailUserName;
@Value("${lz.mail.password}")
private String lzMailPassword;
@Value("${lz.mail.tmp.folder}")
private String lzMailTmpFolder;
public Store connect() throws Exception {
String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
Properties pop3Props = new Properties();
pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false");
pop3Props.setProperty("mail.pop3.port", "995");
pop3Props.setProperty("mail.pop3.socketFactory.port", "995");
URLName url = new URLName("pop3", "pop.gmail.com", 995, "", lzMailUserName, lzMailPassword);
Session session = Session.getInstance(pop3Props, null);
Store store = new POP3SSLStore(session, url);
store.connect();
return store;
}
public Folder openFolder(Store store) throws MessagingException {
Folder folder = store.getDefaultFolder();
folder = folder.getFolder(FOLDER_NAME);
folder.open(Folder.READ_ONLY);
return folder;
}
public List<MailDetails> readAttachement(Folder folder) throws IOException, MessagingException {
Message[] messages = folder.getMessages();
List<MailDetails> mailDetails = new ArrayList<MailDetails>();
for (Message message : messages) {
logMailDetails(message);
if (message.getContent() instanceof Multipart) {
Multipart multipart = (Multipart) message.getContent();
for (int i = 0; i < multipart.getCount(); i++) {
BodyPart bodyPart = multipart.getBodyPart(i);
if (!Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition())) {
continue; // dealing with attachments only
}
InputStream is = bodyPart.getInputStream();
String uid = getUid(message);
String to = getTo(message);
String from = getFrom(message);
File d = new File(lzMailTmpFolder + File.separator + uid);
if (d.exists() == false) {
d.mkdir();
}
File f = new File(d, new DateTime().getMillis() + "-" + bodyPart.getFileName());
FileOutputStream fos = new FileOutputStream(f);
IOUtils.copy(is, fos);
MailDetails md = new MailDetails(to, from, f, uid);
mailDetails.add(md);
}
}
else {
LOG.warn("Message conteant is not Multipart " + message.getContentType() + " skipping ...");
}
}
return mailDetails;
}
private String getFrom(Message message) throws MessagingException {
Address[] froms = message.getFrom();
return froms[0].toString();
}
private String getTo(Message message) throws MessagingException {
Address[] tos = message.getAllRecipients();
return tos[0].toString();
}
public void logMailDetails(Message m) throws MessagingException {
Address[] f = m.getFrom();
if (f != null) {
for (int j = 0; j < f.length; j++)
LOG.debug("FROM: " + f[j].toString());
}
Address[] r = m.getRecipients(Message.RecipientType.TO);
if (r != null) {
for (int j = 0; j < r.length; j++) {
LOG.debug("TO: " + r[j].toString());
}
}
LOG.debug("SUBJECT: " + m.getSubject());
Date d = m.getSentDate();
LOG.debug("SendDate: " + d);
}
private String getUid(Message m) throws MessagingException {
try {
Address[] tos = m.getAllRecipients();
String to = tos[0].toString();
to = to.split("@")[0];
String[] parts = to.split("\\+");
return parts[parts.length - 1];
}
catch (Exception e) {
LOG.error("Failes to extract brand hash from email address " + Lists.newArrayList(m.getFrom()));
return UNKNOWN_BRAND_PATH;
}
}
문제는 원래 맥 bodyPart.getDisposition에서 만든 메일() 항상 null을 반환한다는 것입니다 :
이
은 내가 사용 햄 코드입니다. 아무리 노력해도 첨부 부분 인 부분을 이해할 수 없었습니다 (메일에서 첨부 파일을 추출하면됩니다).나는 웹상에서 ewhat가 그 원인인지 찾아 보았고 답을 찾지 못했습니다. Juceren Hoeller가 여기에 문제가 있음을 나타내는 아래주의 사항을 발견했습니다 (자세한 내용은 여기 : http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/mail/javamail/MimeMessageHelper.html)
다중 메일 관련 경고 : HTML 텍스트 만 포함하지만 인라인 요소 나 첨부 파일은 포함되지 않는 간단한 MIME 메시지 HTML 렌더링이 가능한 이메일 클라이언트를 다소간 사용할 수 있습니다. 그러나 인라인 요소 및 첨부 파일은 이메일 클라이언트 간의 주요 호환성 문제입니다. Microsoft Outlook, Lotus Notes 및 Mac Mail에서 작동하는 인라인 요소 및 첨부 파일을 가져 오는 것은 사실상 불가능합니다. 필요에 따라 특정 멀티 파트 모드를 선택하는 것이 좋습니다. MULTIPART_MODE 상수의 javadoc에 자세한 정보가 포함되어 있습니다.
메일이 Mac에서 전송 된 경우 JavaMail 사용과 관련된 예제가 있습니까?
yosi