Outlook 전자 메일에서 작동하는 Java 끌어서 놓기를 작성하려고합니다. 저는 표준 AWT 이벤트를 사용하여 Outlook에서 Java로 데이터를 전송할 수 없기 때문에 Jacob을 사용했습니다. 즉, 여기 또는 다른 사이트에서 가져온 모든 솔루션은 Java에서 치명적인 오류를 일으키고 있습니다. - 나는 오직 액티브 X 본 적이Jacob Fatal Error
import java.awt.dnd.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
import java.util.List;
import sun.awt.datatransfer.*;
import com.jacob.com.*;
import com.jacob.activeX.*;
public class D2 extends JFrame
{
private static final String DIR = "FILES";
private static void saveSelectedOutlookMails(String directory) {
Dispatch xl = new Dispatch("Outlook.Application");
//Dispatch selection = Dispatch.get(xl, "Selection").toDispatch();
System.out.println(xl);
System.out.println(xl==null);
//PROGRAM CRASHES AFTER THIS LINE
Dispatch explorer = Dispatch.get(xl,"ActiveExplorer").toDispatch();
System.out.println("explorer");
Object selection = Dispatch.get(explorer, "Selection").toDispatch();
Variant count = Dispatch.get(selection, "Count");
for (int mailIndex = 1; mailIndex <= count.toInt(); mailIndex++) {
Object mailItem = Dispatch.call(selection, "Item", new Variant(mailIndex)).toDispatch();
Variant senderName = Dispatch.get(mailItem, "SenderName");
Variant subject = Dispatch.get(mailItem, "Subject");
Variant body = Dispatch.get(mailItem, "Body");
String emailFileName = subject.toString() +".txt";
String fullPath = directory + "/" + emailFileName;
try {
File email = new File(fullPath);
PrintWriter writer = new PrintWriter(new FileWriter(email));
writer.println("From: "+ senderName);
writer.println("Subject: "+ subject);
writer.println("");
writer.print(body);
writer.close();
}
catch (IOException e) {
System.out.println(e.getMessage());
//logger.error("IOException writing e-mail with subject: '"+ subject +"'", e);
continue;
}
Object attachments = Dispatch.get(mailItem, "Attachments").toDispatch();
Variant attachmentCount = Dispatch.get(attachments, "Count");
if (attachmentCount.toInt() > 0) {
for(int attachmentIndex = 1; attachmentIndex<=attachmentCount.toInt(); attachmentIndex++) {
Object attachment = Dispatch.call(attachments, "Item", new Variant(attachmentIndex)).toDispatch();
Variant fileNameVariant = Dispatch.get(attachment, "FileName");
String fileName = fileNameVariant.toString();
Variant saveResult = Dispatch.call(attachment, "SaveAsFile", directory, "/", fileName);
}
}
}
}
public D2() throws Exception
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(0,0,300,300);
this.setVisible(true);
DropTarget dropTarget=new DropTarget();
dropTarget.setComponent(this);
dropTarget.addDropTargetListener(new DropTargetAdapter()
{
public void drop(DropTargetDropEvent dtde){
saveSelectedOutlookMails(DIR);
}
});
}
public static void main(String[] args)
{
try{
new D2();
}catch(Exception e){
e.printStackTrace();
}
}
} 방식으로
범위를 좁히십시오. 어떤 라인에서 치명적인 충돌을합니까? –
탐색기 인스턴스화. 그 전에 두 인쇄물이 실행되고, 그 다음 인쇄물은 실행되지 않습니다. – MarkDacek
Outlook 응용 프로그램에 액세스하는 방법에 문제가있는 것 같습니다. 나는 VB.NET에 자바보다 개인적으로 유창하지만 [Checkout this prior Posting] (http://stackoverflow.com/questions/17361340/delete-and-update-outlook-contact-using-jacob-library) –