在Infopath中获取发件人电子邮件地址

时间:2013-12-18 14:49:25

标签: email outlook infopath

我有一个通过电子邮件发送的表格,通过这样的不同的人旅行。

Person A --> Person B --> Person C

我希望在表格被人C处理时通知A人。因此,A人需要在B人发送的电子邮件副本中。

因为A人并不总是相同,所以我认为将他/她复制的最佳方式是使用B人收到的电子邮件的“发件人”字段并将其复制。

但是如何通过infopath找到此地址,如何将其放入我的电子邮件数据连接?

1 个答案:

答案 0 :(得分:0)

我今天也有同样的问题,并且找不到答案。

所以......我自己做了一些工作,想出了一些解决方案。

首先,我不相信有任何方法可以使用InfoPath OM获取/设置“发件人”地址。这意味着您必须使用以下选项之一:

无代码:

您将仅限于在表单上提供字段,其中“人员A”可以放置其电子邮件地址并在CC中使用此字段。后续阶段。这是唯一的方式,虽然它给用户带来了额外的负担,但它确实具有提供灵活性的好处。

<强>代码:

  1. 编写您自己的代码以使用Outlook Interop或System.Net.Mail发送邮件,然后您将手动设置所有地址。

  2. 如果您使用的是AD或其他内容,则可以随时使用System.DirectoryServices.AccountManagement获取当前使用的电子邮件地址。

  3. 基于我无法找到任何备份文档的假设。 InfoPath使用与默认存储关联的帐户使用EmailSubmitConnection发送电子邮件。您应该能够使用Outlook Interop查找InfoPath将使用的地址。

  4. 以下是代码示例:

    using Outlook = Microsoft.Office.Interop.Outlook;
    
    public string GetDefaultSenderAddress()
    {
        // This actually opens outlook in the same way as InfoPath does to send the message.
        // which can be slow.
        string DefaultAddress = string.Empty;
    
        Outlook.Application OutlookApplication = new Outlook.Application();
        string DefaultStoreId = OutlookApplication.Session.DefaultStore.StoreID;
        foreach (Outlook.Account Account in OutlookApplication.Session.Accounts)
        {
            if (Account.DeliveryStore.StoreID == DefaultStoreId)
            {
                DefaultAddress = Account.SmtpAddress;
            }
        }
        // Note you probably won't want to quit if you are about to send the email. 
        // However I have noticed that this doesn't seem to close Outlook anyway.
        OutlookApplication.Quit();
        return DefaultAddress;
    }
    

    如果帐户类型不同等,您可能需要提供更多支票。但我相信它会有效。 (我为我的场景测试了它,它确实如此)。

    注意:当然这会打开一个Outlook实例,您也必须关闭它。它可能很慢。除非展望已经开放,否则会非常快。无论如何,当从InfoPath Outlook发送时必须打开,所以如果你在发送之前这样做,那么应该没有明显的区别。

    我建议使用无代码/代码选项的组合,因此提供一个自动完成的返回地址以节省用户时间。但如果用户希望将电子邮件返回到其他地址(如果有错误),则可以更正。

    希望您觉得有用。