Что нового

Lotus Notes автоматизация COM

zert88

Новичок
Сообщения
14
Репутация
0
Здравствуйте, в своей организации мы используем ПО Lotus Notes. Думаю и в других организация это ПО не редко используется. Удивительно, что на нашем форуме по этому вопросу так мало информации, а то что есть работает через GUI. На англоязычных ресурсах эта тема более активно обсуждалось и даже имеются некоторые реализации, при чем реализация идет через ComObject. К сожалению посредственные знания английского(как и языков программирования) очень затрудняют попытки состряпать скрипт. Задача на самом деле такая, хотелось бы получить возможность раз в минут 15 проверять свою почту в папке inbox(Входящие) и если скрипт видит, что пришли новые сообщения(с последней проверки) пробежаться по ним и спрасить(если так можно выразиться) все что можно посредствам другого скрипта на ящик gmail к примеру. Можно настроить скрипт на ожидание окошка Уведомления о новом сообщение в LN. У меня имеется скрипт , который может отправлять(по gmail, не lotus) сообщения на почту с вложениями. Вот он

Код:
#Region переменные
   $sSmtpServer     =   "smtp.gmail.com"
   $sFromName       =   "blablabla"
   $sFromAddress    =   "[email protected]"
   $sUsername       =   "bla"
   $sPassword       =   "Password"
   $sSubject        =   "Тема"
   $sBody           =   "Текст письма"
   $sToAddress      =   "[email protected]"
   $iIPPort = 465
   $iSsl = 1
   Dim $aAttach[0]      ; Массив прикрепляемых файлов
   Global $oMyRet[2]
   Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
#EndRegion

$rc = _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject, $sBody, $aAttach, Default, $sUsername, $sPassword, $iIPPort, $iSsl)
If @error Then
   MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf

Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $a_Attach = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 465, $ssl = True)
      Local $objEmail = ObjCreate("CDO.Message"), $i_Error = 0, $i_Error_desciption = ""
      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/languagecode") = 1049
      $objEmail.BodyPart.CharSet = "utf-8"
      $objEmail.BodyPart.ContentTransferEncoding = "quoted-printable"
      $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
      $objEmail.To = $s_ToAddress
      $objEmail.Subject = $s_Subject
      ;         Можно отправлять в формате HTML
      ;$objEmail.HTMLBody = $as_Body
      $objEmail.TextBody = $as_Body

      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext") = True
      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password

      If UBound($a_Attach) > 0 Then
         For $j = 0 To UBound($a_Attach)-1
            If FileExists($a_Attach[$j]) Then
               $objEmail.AddAttachment ($aAttach[$j])
            Else
               Exit MsgBox(4096, "", "Файл " & $a_Attach[$j] & " не найден")
            EndIf
         Next
      EndIf
      If $ssl Then
         $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
      EndIf
      $objEmail.Configuration.Fields.Update
      $objEmail.Fields.Update
      $objEmail.Send
      If @error Then
         SetError(2)
         Return $oMyRet[1]
      EndIf
      $objEmail=""
EndFunc ;==>_INetSmtpMailCom

Func MyErrFunc()
   $HexNumber = Hex($oMyError.number, 8)
   $oMyRet[0] = $HexNumber
   $oMyRet[1] = StringStripWS($oMyError.description, 3)
   ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
   SetError(1); something to check for when this function returns
   Return
EndFunc ;==>MyErrFunc

Хотелось бы сделать так сказать переадресацию на коленке, те с сриптовыми костылями. В организации все настроено так(Domino Server), что во внешку переадресацию не настроить, в рамках DS экосистемы.

На англоязычном форуме нашел два интересных скрипта:

1. Данный скрипт выводит информацию по первому письму , те по самому старому в папке Входящие.( и выдает только вот "subject" и "PostedDate" первого письма) если добавить строку
Код:
$Body = $ntDocument.GETFIRSTITEM ("Body")
- то можно получить текстовое содержимое письма. Но это все на, что меня хватило. Круто было бы данный скрипт переделать для начала так, чтобы иметь возможность получать информацию о последнем входящем сообщении. Ну а там уже можно подумать о массиве писем.

Код:
;Initialize Lotus Notes
$Session = ObjCreate("Notes.NotesSession")
$Maildb = $Session.GetDatabase ("", "")

If Not $Maildb.IsOpen  Then
    $Maildb.OPENMAIL
EndIf

;Look for the first mail in the Lotus Notes "Inbox"
$ntView = $Maildb.GETVIEW ("($Inbox)")
$ntNavigator = $ntView.CREATEVIEWNAV ()
$ntViewEntry = $ntNavigator.GETFIRSTDOCUMENT ()
        
$ntDocument = $ntViewEntry.Document

;Give the mail subject  
$Subject = $ntDocument.GETFIRSTITEM ("subject")
ConsoleWrite("Sujet Mail : " & $Subject.Text & ", ")

;Give the mail date & time  
$PostedDate = $ntDocument.GETFIRSTITEM ("PostedDate")
ConsoleWrite("Date: " & $PostedDate.Text & ", ")
    
;Check if an attached is available

    If $ntDocument.HasEmbedded Then 

        ConsoleWrite("Attached found" & @CrLf)  

        ;**********HERE IT'S BLOCKING - I can't get the attached
        $vaAttachment = $ntDocument.GetAttachment()
        $vaAttachment.extractfile("c:\" & $vaAttachment.name)

    Else

        ConsoleWrite("Attached not found" & @CrLf)

    endif


2. еще интересный скрипт
Код:
#include <date.au3>

Global $recipient, $Subject, $bodytext, $attachment, $saveit
$recipient = "[email protected]"
$Subject = "test"
$bodytext = "more test"
;$attachment = "C:Documents and Settingsyour.nameMy Documentsscriptsemail test.au3"
$saveit = True
SendNotesMail($recipient, $Subject, $bodytext, $attachment, $saveit)

Func SendNotesMail($recipient, $Subject, $bodytext, $attachment, $saveit)
;Start a $Session to notes
$Session = ObjCreate("Notes.NotesSession")
;Get the sessions $UserName and then calculate the mail file name
$UserName = $Session.UserName
$MailDbName = StringLeft($UserName, 1) & StringRight($UserName, (StringLen($UserName) - StringInStr(1, $UserName, " "))) & ".nsf"
;Open the mail database in notes
$Maildb = $Session.GETDATABASE("", $MailDbName)
If $Maildb.IsOpen = 1 Then
;Already open for mail
Else
$Maildb.OPENMAIL()
EndIf
;Set up the new mail document
$MailDoc = $Maildb.CREATEDOCUMENT
$MailDoc.Form = "Memo"
$MailDoc.sendto = $recipient
$MailDoc.Subject = $Subject
$MailDoc.Body = $bodytext
$MailDoc.SAVEMESSAGEONSEND = $saveit
;Set up the embedded $Object and $attachment and attach it
If $attachment <> "" Then
If FileExists(@ScriptDir & "" & $attachment) Then
$filename = $attachment
$fullpath = @ScriptDir & "" & $attachment
ElseIf FileExists($attachment) Then
$pos = StringInStr($attachment, "", 0, -1)
$filename = StringTrimLeft($attachment, $pos)
$fullpath = $attachment
Else
MsgBox(0, "LoNo Error", "attachment not found")
Exit
EndIf
$AttachME = $MailDoc.CREATERICHTEXTITEM($filename)
$EmbedObj = $AttachME.EMBEDOBJECT(1454, "", $fullpath, $filename)
;$MailDoc.CREATERICHTEXTITEM($filename)
EndIf
;Send the document
$MailDoc.PostedDate = _Now();Gets the mail to appear in the sent items folder
$MailDoc.SEND(0, $recipient)
$Maildb = "NULL"
$MailDoc = "NULL"
$AttachME = "NULL"
$Session = "NULL"
$EmbedObj = "NULL"
EndFunc ;==>SendNotesMail

Вот ссылка на книженцию redbooks.ibm.com/redbooks/pdfs/sg245670.pdf по COM манипуляциям с LN
 
Верх