Обманывая Outlook, заставляя думать, что моя отправленная форма infopath не является XML - PullRequest
0 голосов
/ 08 августа 2009

Я унаследовал приложение, которое генерирует формы InfoPath. Мне необходимо добавить функциональность, чтобы формы можно было отправлять по электронной почте, пока они находятся в автономном режиме. Идея состоит в том, что формы могут быть заполнены в автономном режиме, а затем отправлены по электронной почте, а затем обработаны другим приложением, которое проверяет входящие входящие сообщения.

К сожалению, я должен использовать код WEBDav на сервере, чтобы проверить почтовый ящик, который эквивалентен Outlook Web Access. OWA блокирует XML-файлы или удаляет XML-файл из файла. Я попытался установить имя вложения программно для другого расширения, но это не работает, Outlook должен прочитать все файлы и, если он найдет теги XML, извлечет его из документа.

Я попытался изменить первую строку формы и отправить ее. Я изменил <?xml version="1.0" на <?xsl version="1.0". Это сработало! Кажется, что пока Outlook не находит строку 'xml', он не считает ее документом xml.

В настоящее время я отправляю форму программно, используя кнопку и несколько JS.

Можно ли каким-либо образом изменить необработанные данные перед их отправкой? То есть, изменение открывающего тега XML на XSL. Или, возможно, изменить кодировку? Или запутать файл или что-нибудь?

Таким образом, мне нужно обмануть взгляд на то, что представленная форма не является XML. Решение должно быть автономным в XSN.

edit: использование InfoPath 2003. Не уверен насчет версии Exchange, но я думаю, что и ее 2003.

Ответы [ 2 ]

0 голосов
/ 07 октября 2009

Я использовал это раньше и работал очень хорошо. хотя это было несколько лет назад. Он работал против Exchange 2003. Не уверен, что он работает против Exchange 2008, хотя.

Public Function retrieve() As Boolean
    Dim allOK As Boolean = True
    Dim rec As ADODB.Record
    Dim rs As ADODB.Recordset
    Dim url As String
    Dim sql As String
    Dim iMessage As CDO.Message = New CDO.MessageClass
    Dim numAttachments As Integer
    Dim DeleteEmail As Boolean = False
    Dim EmailsFound As Integer = 0
    Try

        rec = New ADODB.Record
        rs = New ADODB.Recordset

        url = "Url to outlook web access inbox"

        rec.Open(url, , ConnectModeEnum.adModeReadWrite, , , AppSettings(MAILBOX_USERNAME), AppSettings(MAILBOX_PASSWORD))

        ' Build the SQL query for the messages.
        sql = "select "
        sql = sql & " ""urn:schemas:mailheader:subject"""
        sql = sql & ", ""urn:schemas:httpmail:hasattachment"""
        sql = sql & ", ""DAV:href"""
        sql = sql & ", ""urn:schemas:httpmail:from"""
        sql = sql & " from scope ('shallow traversal of "
        sql = sql & """" & url & """" & "') "

        If IsDebugEnabled Then log.Debug("retreieveEmails() - Opening Recordset:" & sql)


        ' Open the recordset.
        rs.Open(sql, rec.ActiveConnection, CursorTypeEnum.adOpenUnspecified, LockTypeEnum.adLockOptimistic)

        If Not rs.BOF And Not rs.EOF Then
            rs.MoveFirst()
            ' Loop through all of the messages in the recordset

            Do Until rs.EOF
                EmailsFound += 1
                DeleteEmail = False


                If Not rs.Fields("urn:schemas:mailheader:subject").Value Is System.DBNull.Value Then
                    iMessage.DataSource.Open(System.Convert.ToString(rs.Fields("DAV:href").Value), rec.ActiveConnection, ADODB.ConnectModeEnum.adModeRead, ADODB.RecordCreateOptionsEnum.adFailIfNotExists, ADODB.RecordOpenOptionsEnum.adOpenSource, "", "")
                    'Check that the Attachment is an XML file
                    For Each objAttachment As CDO.IBodyPart In iMessage.Attachments
                        If CStr(objAttachment.FileName & "").ToUpper.EndsWith(".XML") Then
                            'Save the Attachment off
                            objAttachment.SaveToFile(IO.Path.Combine(AppSettings(TEMP_IN_DIR), objAttachment.FileName))
                            DeleteEmail = True
                        End If
                    Next
                End If

                If DeleteEmail Then
                    delete(rs.Fields("DAV:href").Value)
                End If
                rs.MoveNext()
            Loop
        Else
            ' No Emails Found
        End If


        Return True
    Catch e As Exception
        'Log the error
        Return False
    Finally
        Try
            rs.Close()
        Catch
        End Try
        Try
            rs = Nothing
        Catch
        End Try
        Try
            rec.Close()
        Catch
        End Try
        Try
            rec = Nothing
        Catch
        End Try
    End Try

End Function
0 голосов
/ 08 августа 2009

Можете ли вы зашифровать файл во что-то, что Outlook не может увидеть - другими словами, в двоичном файле? Похоже на стеганографию (скрытые сообщения), но что если вы закодируете данные в какой-то другой двоичный объект - например, изображение?

...