2017-02-09 4 views
1

Я должен запускать некоторый Java-код каждый раз, когда получаю конкретное письмо. Я просто загружаю вложение в электронном письме, запускаю банку и отвечаю ответом от выполнения этой банки с приложением.Запустите банку для конкретных писем в Outlook

Можно ли как-то автоматизировать это?

Я проверил подпрограммы VBA, которые можно вызывать с помощью правил Outlook, но я не уверен, могу ли я выполнить свой файл jar с этим.

Любые идеи?

+0

http://stackoverflow.com/questions/30289444/ how-to-call-java-jar-file-from-excel-vba и https://www.mrexcel.com/forum/excel-questions/775383-running-jar-visual-basic-applications.html И да правила, похоже, являются хорошим триггером, он зависит только от параметров, которые вы хотите вызвать код! ;) Я просто не знаю, если/как вы можете снова передать результат вашей банке в VBA, чтобы заполнить ответ – R3uK

+0

Идя глубже, по-видимому, вы можете перенаправить вывод баночки в файл журнала, тогда вы можете прочитать его от VBA! Взгляните на комментарии вопроса SO, который я уже связал! ;) – R3uK

+0

Спасибо, похоже, это может просто сделать то, что я хочу. Время изучать VB сейчас :) –

ответ

1

Вот эта структура, я позволю вам ее настроить!

Вы можете установить правило для использования SaveToDiskAndReply, который является основной программой.

Paste это в начале вашего модуля Outlook:

Option Explicit 

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Private Sub RunSleep(_ 
        exec As WshExec, _ 
        Optional timeSegment As Long = 800 _ 
        ) 
    Do While exec.Status = WshRunning 
     Sleep timeSegment 
    Loop 
End Sub 

Private Function RunProgram(_ 
          program As String, _ 
          Optional command As String = "" _ 
          ) As WshExec 
    Dim wsh As New WshShell 
    Dim exec As WshExec 

    Set exec = wsh.exec(program) 
    Call exec.StdIn.WriteLine(command) 
    Call RunSleep(exec) 
    Set RunProgram = exec 
End Function 

Public Function Run_Jar() As String 
    Dim program As WshExec 
    Dim value As String 
    '''Set the path (jar and log) 
    Set program = RunProgram("java -jar ""D:\\Demo.jar"" 8861ccd621") 
    DoEvents 
    Run_Jar = program.StdOut.ReadAll 
End Function 

и использовать его в качестве сценария запущенного по правилу:

Public Sub SaveToDiskAndReply(ItM As Outlook.MailItem) 
    Dim oAttS As Outlook.Attachments 
    Dim objAtt As Outlook.Attachment 
    Dim oItM As Outlook.MailItem 
    Dim saveFolder As String 
    Dim dateFormat As String 
    Dim JarReturn As String 

    dateFormat = Format(Now, "yyyy-mm-dd") 
    saveFolder = "c:\temp\" 
    Set oAttS = ItM.Attachments 

    '''Save the attachements 
    For Each objAtt In oAttS 
     objAtt.SaveAsFile saveFolder & objAtt.FileName 
    Next objAtt 

    '''Run your jar 
    JarReturn = Run_Jar 

    '''Fill the email 
    Set oItM = OutApp.CreateItem(0) 


    '''Decomment the next line when you're done testing 
    'On Error Resume Next 
    With oItM 
     .To = ItM.SenderEmailAddress 
     .CC = "" 
     .BCC = "" 
     .Subject = ItM.Subject 
     .Body = JarReturn 
     For Each objAtt In oAttS 
      .Attachments.Add saveFolder & objAtt.FileName 
     Next objAtt 
     .Send 'or use .Display 
    End With 
    On Error GoTo 0 

    Set oAttS = Nothing 
    Set objAtt = Nothing 
End Sub 
+0

Большое спасибо. Потребуется некоторое время, чтобы понять это. –

+0

Будут ли обе части кода присутствовать в одном модуле? –

+0

@adirohan: Поскольку 'Public Function Run_Jar' является' Public', и он является единственным, вызванным из основной программы, вы можете иметь их в двух отдельных модулях! ;) – R3uK

Смежные вопросы