2013-12-18 128 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發送時必須打開,所以如果你在發送之前這樣做,那麼應該沒有明顯的差異。

我會建議使用無代碼/代碼選項的組合,以便提供一個自動完成的返回地址以節省用戶時間。但是,如果用戶希望將電子郵件返回到其他地址(如果有錯誤),則可以更正。

希望你覺得有用。

相關問題