2013-12-18 5 views
0

У меня есть форму, отправленную по электронной почте, которая путешествует через таких людей.Получить адрес электронной почты отправителя в Infopath

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

Я хочу, чтобы человек А быть информированным, когда форма обрабатывается человеком C. Таким образом, пользователь А должен быть в копии письма, посланного человека B.

Потому что человек А не всегда один и тот же, я думаю, что лучший способ поставить его/ее в копию - использовать поле «from» электронной почты, полученное человеком B, и поместить его в копию.

Но как я могу найти этот адрес с infopath и как его поместить в мое почтовое соединение для передачи данных?

ответ

0

У меня сегодня был такой же вопрос, и я не мог найти ответы на вопросы.

Итак ... Я сам поработал и придумал несколько решений.

Во-первых, я не верю, что есть какой-либо способ получить/установить адрес «От» с помощью InfoPath OM. Это означает, что вы должны будете использовать один из следующих вариантов:

Нет Код:

Вам будет ограничены предоставлением поля на форме, где «Люди А» может поставить свой адрес электронной почты и использовать этот в ЦК. для последующих этапов. Это своего рода единственный способ, и в то время как это дополнительное бремя для пользователя, оно имеет преимущество обеспечения гибкости.

Код:

  1. Написать свой собственный код для отправки почты с помощью Outlook, Interop или 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; 
} 

Вы, возможно, придется предоставить еще несколько проверок в случае различных типов счетов и т.д. Но я считаю, что это будет работать. (Я тестировал его для своего сценария, и это так).

Примечание: Конечно, это открывает внешний вид, который вам также придется закрыть. И это может быть медленным. Если перспектива уже открыта, в этом случае она будет очень быстрой. Во всяком случае, когда отправка из InfoPath Outlook должна быть открыта, поэтому, если вы сделаете это перед отправкой, не должно быть заметной разницы.

Я бы посоветовал использовать комбинацию без кода/с кодовыми опциями, поэтому укажите адрес возврата, который будет автоматически завершен, чтобы сохранить время пользователя. Но можно исправить, если пользователь хочет, чтобы письмо было отправлено на другой адрес, если есть ошибка.

Надеюсь, что вы найдете это полезным.

Смежные вопросы