2010-02-18 3 views
2

Lotus Notes 계정을 설정하여 클라이언트의 전자 메일을 수락하고 각 전자 메일을 다른 응용 프로그램에서 처리 할 일반 텍스트 파일로 자동 저장합니다.Lotus Notes - 전자 메일을 일반 텍스트 파일로 내보내기

그래서 이메일에 텍스트를 자동으로 내보내려면 Lotus에서 가장 먼저 에이전트를 만들려고합니다.

이 작업을 수행하는 데있어 최상의 표준 방법이 있습니까?

나는 거의 작동하는 LotusScript Agent를 만들었습니다. 그러나 버그가 있습니다. 메모의 본문이 32K 문자를 초과하면 여분의 CR/LF 쌍을 삽입하기 시작합니다.

Lotus Notes 7.0.3을 사용하고 있습니다.

Sub Initialize 
On Error Goto ErrorCleanup 
Dim session As New NotesSession 
Dim db As NotesDatabase 
Dim doc As NotesDocument 
Dim uniqueID As Variant 
Dim curView As NotesView 
Dim docCount As Integer 
Dim notesInputFolder As String 
Dim notesValidOutputFolder As String 
Dim notesErrorOutputFolder As String 
Dim outputFolder As String 
Dim fileNum As Integer 
Dim bodyRichText As NotesRichTextItem 
Dim bodyUnformattedText As String 
Dim subjectText As NotesItem 

''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'INPUT OUTPUT LOCATIONS 
outputFolder = "\\PASCRIA\CignaDFS\CUser1\Home\mikebec\MyDocuments\" 
notesInputFolder = "IBEmails" 
notesValidOutputFolder = "IBEmailsDone" 
notesErrorOutputFolder="IBEmailsError" 
''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

Set db = session.CurrentDatabase 
Set curview = db.GetView(notesInputFolder) 
docCount = curview.EntryCount 
Print "NUMBER OF DOCS " & docCount 
fileNum = 1 
While (docCount > 0) 
    'set current doc to 
    Set doc = curview.GetNthDocument(docCount) 

    Set bodyRichText = doc.GetFirstItem("Body") 
    bodyUnformattedText = bodyRichText.GetUnformattedText() 
    Set subjectText = doc.GetFirstItem("Subject") 
    If subjectText.Text = "LotusAgentTest" Then 
    uniqueID = Evaluate("@Unique") 
    Open "\\PASCRIA\CignaDFS\CUser1\Home\mikebec\MyDocuments\email_" & uniqueID(0) & ".txt" For Output As fileNum 
    Print #fileNum, "Subject:" & subjectText.Text 
    Print #fileNum, "Date:" & Now 
    Print #fileNum, bodyUnformattedText 
    Close fileNum 
    fileNum = fileNum + 1 
    Call doc.PutInFolder(notesValidOutputFolder) 
    Call doc.RemoveFromFolder(notesInputFolder) 
    End If 
    doccount = doccount-1 
Wend 
Exit Sub 
    ErrorCleanup: 
    Call sendErrorEmail(db,doc.GetItemValue("From")(0)) 
    Call doc.PutInFolder(notesErrorOutputFolder) 
    Call doc.RemoveFromFolder(notesInputFolder) 
    End Sub 

업데이트 분명히 32킬로바이트 문제가 일치하지 않습니다 - 지금까지, 그것은 32K 후 여분의 캐리지 리턴을 얻기 시작 한 문서입니다 :

여기 내 스크립트입니다.

답변

2

32K 버그의 원인은 확실치 않지만 Lotus Notes 내에서 32K 또는 64K 순서로 많은 제한 사항이 있다는 것을 알고 있습니다. 따라서이 중 하나에 문제가있는 것 같습니다. 여분의 CR/LF가 추가 될 것이라고 상상할 수는 없습니다. 아마도 당신은 NotesRichTextItem 클래스에서 GetFormattedText 메서드를 사용하여 더 나은 평가를받을 수 있습니까?

좀 더 복잡하지만 NotesRichTextNavigator 클래스를 사용하여 메모의 모든 단락을 반복하여 한 번에 하나씩 출력 할 수도 있습니다. 그런 식으로 출력을 깨면 CR/LF 문제가 제거 될 수 있습니다.

마지막으로 필자는 항상 Lotus Notes의 서식있는 텍스트를 처리하기 위해 Midas의 LSX를 제안합니다. 리치 텍스트 필드를보다 강력하게 제어 할 수있는 애드온을 판매합니다.

모범 사례로서, 내가 코드를 읽을 때 마음에 떠오르는 것은 루핑 구조입니다. 뷰에서 첫 번째 문서를 가져 와서 처리하고 다음 문서를 가져 와서 Nothing과 같은지 확인하는 것이 더 효율적입니다. 이렇게하면 루프가 인덱스 순서로 뷰를 통과하도록 설정할 수 있으며 매번 N 번째 문서를 찾기 위해 인덱스를 검색 할 필요가 없습니다. 또한 카운터를 유지 관리하지 않아도됩니다.

Set doc = curview.GetFirstDocument() 
While Not (doc Is Nothing) 

    'Do processing here... 

    Set doc = curview.GetNextDocument(doc) 
Wend 
+0

감사합니다. Ken. 그런데 전자 메일을 텍스트 파일에 저장하기 위해 온라인에서 샘플 스크립트를 접하게 된 적이 있습니까? 필자가 발견 한 모든 예는 첨부 파일을 파일에 저장하는 것이지만 전자 메일의 본문은 저장하지 않습니다. – mbeckish

+0

나는 가지고 있지 않았지만 방금 빠른 검색을 수행하고 몇 가지 예를 발견했습니다. 하나는 Notes의 DXL 기능을 사용하는 것처럼 보입니다. http://tech.niques.info/projects/lotus-notes-email-export/ 다른 하나는 Perl로 작성되었지만 http : //를 추출 할 수있는 논리가있을 수 있습니다. www.perlmonks.org/?node_id=136382 –

3

안부와 함께으로 32Kb 일을 대신에, : 다음과 같이 요점은

Set bodyRichText = doc.GetFirstItem("Body") 

... 당신은 이메일 문서에 모든 "몸"필드를 반복하는 것을 고려할 수 있습니다 . 대량의 서식있는 텍스트를 다룰 때 Domino는 내용을 여러 개의 서식있는 텍스트 필드로 "청크"합니다. 처리중인 문서를 확인하십시오. 문서 속성을 볼 때 "본문"필드의 인스턴스가 여러 번 나타날 수 있습니다.

+0

감사합니다. Ben - 나는 그것을 조사 할 것입니다. – mbeckish

1

외부 이메일은 대부분 MIME으로 제공됩니다. 따라서 document.hasMime을 확인한 다음 mime 클래스를 사용하여 내용에 접근 할 수 있습니다. 그런 다음 64k 제한이 없습니다. 샘플이 도움말에 포함되어 있습니다. 코드를 원한다면 답장하십시오.

관련 문제