2013-12-18 99 views
0

我有通过电子邮件发送的表单,可以通过不同的人这样的旅行。在Infopath中获取发件人电子邮件地址

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

我想

因为一个人是不是在形式是由人C.所以一个人必须由人B.发送的电子邮件的副本治疗者A到通知总是同一个人,我认为把他/她放在副本中的最佳方式是使用B人收到的电子邮件的“发件人”字段并将其复制。

但是我怎样才能找到这个地址与infopath,我怎么能把它放到我的电子邮件数据连接?

回答

0

我今天有同样的问题,我自己也找不到太多的答案。

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

首先,我不认为有任何方法使用InfoPath OM获取/设置“发件人”地址。这意味着你将不得不使用下列选项之一:

无编号:

您将被限制为形式,其中“人A”可以把自己的电子邮件地址,并使用上提供了一个场在CC。为后续阶段。这是唯一的方式,虽然它给用户带来额外的负担,但它具有提供灵活性的好处。

代码:

  1. 编写自己的代码中使用Outlook互操作或System.Net.Mail发送邮件,然后你就可以手动设置反正所有的地址。

  2. 如果您正在使用AD或别的东西,那么你可以总是使用System.DirectoryServices.AccountManagement目前使用的电子邮件地址。

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

下面是一个代码示例:

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发送时必须打开,所以如果你在发送之前这样做,那么应该没有明显的差异。

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

希望你觉得有用。

相关问题