0

InfoPathフォームを生成するアプリケーションを継承しました。オフラインでフォームをメールで送信できるように、機能を追加する必要があります。フォームはオフラインで入力し、電子メールで送信してから、送信受信ボックスをチェックする別のアプリケーションで処理できるという考え方です。

残念ながら、サーバーでWEBDavコードを使用して、OutlookWebAccessと同等の電子メール受信ボックスを確認する必要があります。OWAは、xmlファイルをブロックするか、ファイルからxmlを取り除きます。プログラムで添付ファイルの名前を別の拡張子に設定しようとしましたが、機能しません。Outlookはすべてのファイルを読み取る必要があり、XMLタグが見つかった場合は、ドキュメントから削除します。

私が試したのは、フォームの最初の行を変更して送信することでした。に変更し<?xml version="1.0"ました<?xsl version="1.0"。機能した!Outlookが「xml」文字列を見つけられない限り、それはxmlドキュメントであるとは思わないようです。

現在、ボタンといくつかのJSを使用してプログラムでフォームを送信しています。

送信する前に生データを変更する方法はありますか?つまり、開始XMLタグをXSLに変更します。または、おそらくエンコーディングを変更しますか?または、ファイルなどを難読化しますか?

要約すると、送信されたフォームがXMLではないと考えるように見通しを騙す必要があります。ソリューションは、XSN内に自己完結型である必要があります。

編集:InfoPath 2003を使用します。Exchangeのバージョンはわかりませんが、2003年もそうだと思います。

4

2 に答える 2

0

ファイルを暗号化して、見通しが見ることができないもの、つまりバイナリファイルにできますか? ステガノグラフィー (隠しメッセージ) のように聞こえますが、データを他のバイナリ オブジェクト (画像など) にエンコードするとどうなるでしょうか?

于 2009-08-08T08:16:47.247 に答える
0

私はこれを以前に使用したことがあり、非常にうまく機能しました。数年前のことですが。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
于 2009-10-07T12:57:55.850 に答える