문제

제가 작업하고 있는 애플리케이션에 대해 상사로부터 방금 요청을 받았습니다.기본적으로 우리는 외부 클라이언트가 Excel 파일을 제출할 수 있도록 이메일 주소를 설정하고 있습니다.

나에게 필요한 것은 이 주소로 전송된 모든 이메일을 자동으로 선택하여 첨부 파일을 처리하고 폴더에 저장할 수 있는 방법입니다.

어디서부터 시작해야 할지에 대한 정보도 도움이 될 것입니다.\

메모:이를 위해 Lotus Notes 서버를 사용하고 있지만 일반적인 방법이 더 도움이 될 것입니다(가능한 경우).

도움이 되었습니까?

해결책

이메일 -> 메일서버 ->[뭔가] -> 디스크 상의 파일.

디스크의 파일은 구문 분석하고 사용하기가 매우 쉽습니다. 자바메일.

[무언가]는 다음과 같을 수 있습니다:

다른 팁

편집하다: 이 답변을 처음 작성한 이후로 Wiser는 옮겨갔고 이제는 단위 테스트 도구일 뿐이라고 주장하므로 아래 답변을 약간의 소금과 함께 받아들이십시오...


Svrist의 답변은 좋지만 중간 단계(나중에 Java 시스템에서 픽업할 수 있도록 디스크에 메일을 기록하는 메일 서버)를 피하려면 다음을 사용할 수 있습니다. 더 현명한.

Wiser를 사용하면 Java 내 메일 서버를 시작할 수 있습니다.

Wiser wiser = new Wiser();
wiser.setPort(2500);
wiser.start();

그런 다음 정기적으로 메일을 폴링할 수 있습니다.

for (WiserMessage message : wiser.getMessages())
{
    String envelopeSender = message.getEnvelopeSender();
    String envelopeReceiver = message.getEnvelopeReceiver();

    MimeMessage mess = message.getMimeMessage();

    // mail processing goes here
}

데이터베이스의 메일을 사용하십시오(Domino 관리자가 이를 설정할 수 있지만 도움말 파일에도 있습니다).

해당 데이터베이스에서 정기적으로 실행되어 모든 새 문서를 처리하는 에이전트를 만들 수 있습니다.해당 에이전트는 NotesRichTextItem 클래스의 EmbeddedObjects 속성과 NotesEmbeddedObject 클래스의 ExtractFile 메서드를 사용하여 첨부 파일에 대한 핸들을 가져오고 지정한 위치에 추출합니다.

예를 들어, 이 스크립트는 문서의 본문 항목에 있는 모든 첨부 파일, 개체 링크 및 포함된 개체를 살펴봅니다.첨부 파일을 찾을 때마다 파일을 C 드라이브의 SAMPLES 디렉터리로 분리하고 문서에서 첨부 파일을 제거합니다.

Dim doc As NotesDocument
Dim rtitem As Variant
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
  Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
      Call o.ExtractFile( "c:\samples\" & o.Source )
      Call o.Remove
      Call doc.Save( False, True )
    End If
  End Forall
End If

저는 최근 Domino 서버에서 Java 에이전트를 사용하여 많은 작업을 수행했습니다.Domino 8.5 서버는 Java 6과 그 임베디드를 지원하므로 약간의 Domino 개발 경험이 있는 사람이라면 새 메일이 도착할 때 실행되는 에이전트를 구성하는 데 오랜 시간이 걸리지 않습니다.LotusScript에서는 훨씬 더 쉽지만 이를 위해서는 계약자를 고용하여 제공해야 하는 보다 전문적인 기술이 필요합니다.

발생할 수 있는 제한은 추출된 파일과 관련되어 Domino 서버의 파일 구조에 쉽게 배치할 수 있지만 OS 보안으로 인해 다른 서버에 배치하는 것이 제한될 수 있습니다.

Lotus Notes/Domino는 Notes 데이터베이스에 메일을 저장합니다.문서 가져오기(이메일), 필드 값 읽기(보낸 사람, 제목) 및 파일 분리에 사용할 수 있는 API가 있습니다.

API에는 다음이 포함됩니다.

-LotusScript(VB 변형, Notes 데이터베이스 내에서 사용 가능)

-Java(데이터베이스 내부 또는 외부에서)

-C API(외부)

-COM 서버를 통해서도 동일한 API 사용 가능

마지막으로 실행된 이후 생성된 문서를 찾고, 첨부 파일을 찾고, 추출할 수 있는 "예약된 에이전트"를 데이터베이스 내에(LotusScript 또는 Java 사용) 생성할 수 있습니다.에이전트는 파일 시스템에 쓰고 다른 프로세스를 시작하는 데 필요한 권한을 포함하여 서버에 대한 적절한 권한이 있는 ID로 서명되어야 합니다.

데이터베이스 외부에서는 LotusScript를 제외한 모든 API를 사용하여 서버/메일 데이터베이스에 로그인하고 유사한 프로세스를 따를 수 있습니다.클라이언트나 별도의 서버에서 로컬로 파일을 추출합니다.C API 및 COM에는 Notes 클라이언트 설치가 필요하지만 Java 애플리케이션은 전체 설치 없이 CORBA/DIIOP를 통해 실행되도록 설정할 수 있습니다.

자세한 내용은 Domino Designer 도움말(또는 C API용 IBM 웹사이트)을 참조하세요.

이를 수행하는 "일반적인 방법"에 관해서는 Notes의 데이터에 액세스하고 첨부 파일을 추출해야 하는 경우 이 API가 최선의 선택이라고 생각합니다.애플리케이션을 다른 메일 시스템으로 포팅할 계획이라면 "인터페이스"를 통해 API 루틴을 분리하는 것을 고려하세요. 그러면 새 메일 시스템을 지원하기 위해 해당 인터페이스의 새 구현만 추가하면 됩니다.

DIIOP를 사용하면 비교적 쉽게 Notes 문서에 액세스할 수 있습니다. C Api 방식을 사용하는 것보다 훨씬 쉬울 것입니다.

POP3Client를 사용해 보세요. 넷 커먼즈 패키지;이를 통해 Java 프로그램은 원하는 간격(몇 분마다?)으로 특정 계정에 대한 새 메일을 확인할 수 있습니다.매시간?), 원하는 대로 메시지를 가져오거나 삭제합니다.

Domino 서버에서 SMTP/POP3를 활성화할 수 있습니다.이전에 이 작업을 수행하여 Squirrel Mail을 실행했습니다.SMTP는 약간의 리소스 집약적이지만 작업을 수행하기 위해 LotusLand로 내려갈 필요가 없기 때문에 노력할 가치가 있습니다.특정 이메일 상자(POP3 또는 SMTP)를 확인하고 메시지를 구문 분석하여 첨부 파일을 가져와 필요한 곳에 배치하는 작은 Java CLI 프로그램을 작성하기만 하면 됩니다.

여기에는 많은 문서와 예제가 있습니다.http://java.sun.com/products/javamail/

이 접근 방식을 사용하여 개발한 기술은 Lotus/Domino에 특정한 기술보다 미래 경력에 더 광범위하게 적용될 수 있습니다.

무엇을 하든 Lotus Notes 데이터 구조를 이해해야 합니다.좋은 소식은 완전 자동화된 솔루션을 Notes에서 매우 쉽게 구축할 수 있다는 것입니다.

가장 좋은 방법은 Notes 내에 구축하는 것이며 새 메일이 수신될 때마다 자동으로 실행되도록 설정할 수 있습니다.Gary의 답변은 끝났지만 경험이 없으면 직접 구현하는 방법을 파악하기 어려울 수 있습니다.반면에 유능한 Notes 프로그래머라면 설정하는 데 한두 시간 이상 걸리지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top