0

我继承了一个生成 InfoPath 表单的应用程序。我需要添加功能,以便可以在离线时通过电子邮件提交表单。这个想法是可以离线填写表格,然后通过电子邮件发送,然后由另一个检查提交收件箱的应用程序处理。

不幸的是,我必须在服务器上使用 WEBDav 代码来检查与 Outlook Web Access 等效的电子邮件收件箱。OWA 阻止 xml 文件或从文件中删除 xml。我尝试以编程方式将附件的名称设置为另一个扩展名,但这不起作用,Outlook 必须读取所有文件,如果找到 XML 标记,则将其从文档中取出。

我所做的尝试是更改表单的第一行并提交。我将其更改<?xml version="1.0"<?xsl version="1.0". 有效!似乎只要 Outlook 没有找到“xml”字符串,它就不会认为它是一个 xml 文档。

目前我正在使用按钮和一些 JS 以编程方式提交表单。

有什么方法可以在提交之前修改原始数据?即,将开始的 XML 标记更改为 XSL。或者也许改变编码?或混淆文件或任何东西?

总之,我需要让 Outlook 认为提交的表单不是 XML。解决方案必须自包含在 XSN 中。

编辑:使用 InfoPath 2003。不确定 Exchange 版本,但我认为它也是 2003。

4

2 回答 2

0

你能把文件加密成outlook看不到的东西——换句话说就是二进制文件吗?听起来有点像隐写术(隐藏消息),但如果你将数据编码成其他二进制对象——也许像图像?

于 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 回答