Acessar o e-mail como um representante usando o EWS no Exchange
Saiba como acessar o email como delegado usando a API Gerenciada do EWS ou o EWS no Exchange.
Você pode usar a API Gerenciada do EWS ou o EWS para dar a um delegado de usuário acesso à pasta Caixa de Entrada do proprietário de uma caixa de correio. Em seguida, o delegado pode criar solicitações de reunião em nome do proprietário da caixa de correio, pesquisar por email e recuperar, atualizar e excluir email da pasta Caixa de Entrada do proprietário da caixa de correio, dependendo de suas permissões.
Como delegado, você usa os mesmos métodos e operações para acessar a pasta Caixa de Entrada do proprietário de uma caixa de correio que você usa para acessar uma pasta caixa de entrada sem acesso de delegado. A diferença main é que você precisa usar o acesso explícito para localizar ou criar um item de email e, depois de identificar a ID do item, você pode usar o acesso implícito para obter, atualizar ou excluir o item.
Tabela 1. Métodos de API Gerenciada do EWS e operações EWS para acessar email como delegado
Se você quiser... | Use este método de API Gerenciada do EWS… | Use esta operação do EWS… |
---|---|---|
Criar e enviar um email como delegado |
EmailMessage.Save onde o parâmetro FolderId fornece acesso explícito à pasta Rascunhos do proprietário da caixa de correio EmailMessage.SendAndSaveCopy onde o parâmetro FolderId fornece acesso explícito à pasta Itens Enviados do proprietário da caixa de correio |
CreateItem em que o elemento Mailbox especifica o EmailAddress do proprietário da caixa de correio SendItem onde o elemento Caixa de Correio especifica o EmailAddress do proprietário da caixa de correio |
Criar várias mensagens de email como delegado |
ExchangeService.CreateItems em que o parâmetro FolderId fornece acesso explícito à pasta Caixa de Entrada do proprietário da caixa de correio |
CreateItem em que o elemento Mailbox especifica o EmailAddress do proprietário da caixa de correio |
Pesquise ou encontre um email como delegado |
ExchangeService.FindItems em que o parâmetro FolderId fornece acesso explícito à pasta Caixa de Entrada do proprietário da caixa de correio |
FindItem em que o elemento Caixa de Correio especifica o EmailAddress do proprietário da caixa de correio |
Obter um email como delegado |
EmailMessage.Bind |
GetItem |
Atualizar um email como delegado |
EmailMessage.Bind seguido por EmailMessage.Update |
GetItem seguido por UpdateItem |
Excluir um email como delegado |
EmailMessage.Bind seguido por EmailMessage.Delete |
GetItem seguido por DeleteItem |
Tenha as seguintes coisas em mente ao trabalhar com emails como delegado:
Se um delegado precisar trabalhar apenas com solicitações e respostas de reunião, o delegado não precisará de acesso à pasta Caixa de Entrada. Para obter mais informações, consulte tarefas de pré-requisito para acessar calendários como delegado.
Quando um destinatário recebe uma mensagem enviada em nome de um proprietário de caixa de correio, o remetente aparece como "Delegado em nome do proprietário da caixa de correio".
Observação
Nos exemplos de código deste artigo, primary@contoso.com está o proprietário da caixa de correio.
Tarefas de pré-requisito
Antes que um usuário possa acessar a pasta Caixa de Entrada do proprietário da caixa de correio como delegado, o usuário deve ser adicionado como um delegado com permissões para a pasta Caixa de Entrada do proprietário da caixa de correio.
Criar e enviar um email como delegado usando a API Gerenciada do EWS
A API Gerenciada do EWS permite que você use o objeto de serviço para o usuário delegado criar e enviar email em nome do proprietário da caixa de correio. Este exemplo mostra como usar o método Salvar para salvar a mensagem na pasta Rascunhos do proprietário da caixa de correio e, em seguida, o método SendAndSaveCopy para enviar o email e salvar a mensagem na pasta Itens Enviados do proprietário da caixa de correio.
Este exemplo pressupõe que o serviço seja um objeto ExchangeService válido para o delegado e que o delegado recebeu as permissões apropriadas para a pasta Caixa de Entrada, Rascunhos e Itens Enviados do proprietário da caixa de correio.
public static void DelegateAccessCreateEmail(ExchangeService service)
{
// Create an email message and provide it with connection
// configuration information by using an ExchangeService
// object named service.
EmailMessage message = new EmailMessage(service);
// Set properties on the email message.
message.Subject = "Company Soccer Team";
message.Body = "Are you interested in joining?";
message.ToRecipients.Add("sadie@contoso.com");
// Save the email to the mailbox owner's Drafts folder.
// This method call results in a CreateItem call to EWS.
// The FolderId parameter contains the context for the
// mailbox owner's Inbox folder. Any additional actions
// taken on this message will be performed in the mailbox
// owner's mailbox.
message.Save(new FolderId(WellKnownFolderName.Drafts, new Mailbox("primary@contoso.com")));
// Send the email and save the message in the mailbox owner's
// Sent Items folder.
// This method call results in a SendItem call to EWS.
message.SendAndSaveCopy(new FolderId(WellKnownFolderName.SentItems, new Mailbox("primary@contoso.com")));
Console.WriteLine("An email with the subject '" + message.Subject + "' has been sent to '"
+ message.ToRecipients[0] + "' and saved in the Sent Items folder of the mailbox owner.");
}
Criar e enviar um email como delegado usando o EWS
O EWS permite que você use o objeto de serviço para o usuário delegado criar e enviar email em nome do proprietário da caixa de correio. Este exemplo mostra como usar a operação CreateItem para criar um email e a operação SendItem para enviar a hora e salvá-la na pasta Itens Enviados do proprietário da caixa de correio.
Essa também é a primeira solicitação XML que a API Gerenciada do EWS envia quando você usa o método Save para criar e enviar um email.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version=" Exchange2007_SP1" />
</soap:Header>
<soap:Body>
<m:CreateItem MessageDisposition="SaveOnly">
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="drafts">
<t:Mailbox>
<t:EmailAddress>primary@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:SavedItemFolderId>
<m:Items>
<t:Message>
<t:Subject>Company Soccer Team</t:Subject>
<t:Body BodyType="HTML">Are you interested in joining?</t:Body>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>sadie@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</m:Items>
</m:CreateItem>
</soap:Body>
</soap:Envelope>
O servidor responde à solicitação CreateItem com uma mensagem CreateItemResponse que inclui um valor de elemento ResponseCode do NoError, que indica que o email foi criado e salvo com êxito. A resposta também contém a ID do item do email recém-criado.
O valor ItemId foi abreviado para legibilidade.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15"
MinorVersion="0"
MajorBuildNumber="893"
MinorBuildNumber="17"
Version="V2_10"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</s:Header>
<s:Body>
<m:CreateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:CreateItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:Items>
<t:Message>
<t:ItemId Id="iNRaAAA="
ChangeKey="CQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiQPU" />
</t:Message>
</m:Items>
</m:CreateItemResponseMessage>
</m:ResponseMessages>
</m:CreateItemResponse>
</s:Body>
</s:Envelope>
Em seguida, use a operação SendItem para enviar a mensagem em nome do proprietário da caixa de correio e salvá-la na pasta Itens Enviados do proprietário da caixa de correio.
O valor ItemId foi abreviado para legibilidade.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version=" Exchange2007_SP1" />
</soap:Header>
<soap:Body>
<m:SendItem SaveItemToFolder="true">
<m:ItemIds>
<t:ItemId Id="iNRaAAA="
ChangeKey="CQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiQPU" />
</m:ItemIds>
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems">
<t:Mailbox>
<t:EmailAddress>primary@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:SavedItemFolderId>
</m:SendItem>
</soap:Body>
</soap:Envelope>
O servidor responde à solicitação SendItem com uma mensagem SendItemResponse que inclui um valor de elemento ResponseCode do NoError, o que indica que o email foi enviado e salvo na pasta Sent Items do proprietário da caixa de correio com êxito.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15"
MinorVersion="0"
MajorBuildNumber="893"
MinorBuildNumber="17"
Version="V2_10"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</s:Header>
<s:Body>
<m:SendItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:SendItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
</m:SendItemResponseMessage>
</m:ResponseMessages>
</m:SendItemResponse>
</s:Body>
</s:Envelope>
Pesquise um email como delegado usando a API Gerenciada do EWS
Para pesquisar um email, você deve usar um dos métodos ExchangeService.FindItems que inclui um parâmetro FolderId , para que você possa especificar a pasta Caixa de Entrada do proprietário da caixa de correio.
static void DelegateAccessSearchEmailWithFilter(ExchangeService service)
{
// Limit the result set to 10 items.
ItemView view = new ItemView(10);
// Define the search filter.
SearchFilter.ContainsSubstring filter = new SearchFilter.ContainsSubstring(ItemSchema.Subject,
"soccer", ContainmentMode.Substring, ComparisonMode.IgnoreCase);
view.PropertySet = new PropertySet(ItemSchema.Subject,
ItemSchema.DateTimeReceived,
EmailMessageSchema.IsRead);
// Item searches do not support deep traversal.
view.Traversal = ItemTraversal.Shallow;
// Sorting.
view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
try
{
// Call FindItems to find matching Inbox items.
// The parameters of FindItems must denote the mailbox owner,
// mailbox, and Inbox folder.
// This call results in a FindItem call to EWS.
FindItemsResults<Item> results = service.FindItems(new
FolderId(WellKnownFolderName.Inbox, "primary@contoso.com"),
filter, view);
foreach (Item item in results.Items)
{
Console.WriteLine("Subject: {0}", item.Subject);
Console.WriteLine("Id: {0}", item.Id.ToString());
if (item is EmailMessage)
{
EmailMessage message = item as EmailMessage;
Console.WriteLine("Read: {0}", message.IsRead.ToString());
}
}
}
catch (Exception ex)
{
Console.WriteLine("Exception while enumerating results: {0}", ex.Message);
}
}
Depois que a chamada FindItems retornar uma resposta com uma ID, você pode obter, atualizar ou excluir esse email usando a ID e o acesso implícito - e você não precisa especificar o endereço SMTP do proprietário da caixa de correio.
Pesquise por um email como delegado usando o EWS
O EWS permite que você use o objeto de serviço para o usuário delegado pesquisar emails que atendam a um conjunto de critérios de pesquisa. Este exemplo mostra como usar a operação FindItem para localizar mensagens na pasta Caixa de Entrada do proprietário que contêm a palavra "futebol" no assunto.
Essa também é a solicitação XML que a API Gerenciada do EWS envia quando você procura por um email.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version=" Exchange2007_SP1" />
</soap:Header>
<soap:Body>
<m:FindItem Traversal="Shallow">
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:Subject" />
<t:FieldURI FieldURI="item:DateTimeReceived" />
<t:FieldURI FieldURI="message:IsRead" />
</t:AdditionalProperties>
</m:ItemShape>
<m:IndexedPageItemView MaxEntriesReturned="10"
Offset="0"
BasePoint="Beginning" />
<m:Restriction>
<t:Contains ContainmentMode="Substring"
ContainmentComparison="IgnoreCase">
<t:FieldURI FieldURI="item:Subject" />
<t:Constant Value="soccer" />
</t:Contains>
</m:Restriction>
<m:SortOrder>
<t:FieldOrder Order="Descending">
<t:FieldURI FieldURI="item:DateTimeReceived" />
</t:FieldOrder>
</m:SortOrder>
<m:ParentFolderIds>
<t:DistinguishedFolderId Id="inbox">
<t:Mailbox>
<t:EmailAddress>primary@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:ParentFolderIds>
</m:FindItem>
</soap:Body>
</soap:Envelope>
O servidor responde à solicitação FindItem com uma FindItemResponse mensagem que inclui um valor de elemento ResponseCode de NoError, que indica que a pesquisa foi concluída com êxito. A resposta contém um elemento Message para todos os emails que atendem aos critérios de pesquisa. Nesse caso, apenas um email é encontrado.
O valor do elemento ItemId foi reduzido para legibilidade.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15"
MinorVersion="0"
MajorBuildNumber="893"
MinorBuildNumber="17"
Version="V2_10"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</s:Header>
<s:Body>
<m:FindItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:FindItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:RootFolder IndexedPagingOffset="1"
TotalItemsInView="1"
IncludesLastItemInRange="true">
<t:Items>
<t:Message>
<t:ItemId Id="iNwoAAA="
ChangeKey="CQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiQuu" />
<t:Subject>Soccer team</t:Subject>
<t:DateTimeReceived>2014-03-10T06:16:55Z</t:DateTimeReceived>
<t:IsRead>false</t:IsRead>
</t:Message>
</t:Items>
</m:RootFolder>
</m:FindItemResponseMessage>
</m:ResponseMessages>
</m:FindItemResponse>
</s:Body>
</s:Envelope>
Agora que você tem o ItemId para o email que atende aos seus critérios, você pode obter, atualizar ou excluir esse email usando o ItemId e o acesso implícito - e você não precisa especificar o endereço SMTP do proprietário da caixa de correio.
Obter, atualizar ou excluir itens de email como delegado usando a API Gerenciada do EWS
Você pode usar a API Gerenciada do EWS para obter, atualizar ou excluir um email da mesma forma que executa essas ações quando não estiver usando o acesso de delegado. A única diferença é que o objeto ExchangeService é para o usuário delegado. A ID do item incluída na chamada do método Bind identifica exclusivamente o item no repositório de caixas de correio, na pasta Caixa de Entrada do proprietário da caixa de correio.
Tabela 2. Métodos de API Gerenciada do EWS trabalhando com email como delegado
Tarefa | Método da API Gerenciada do EWS | Exemplo de código |
---|---|---|
Obter um email |
Vincular |
Gerenciar um item usando a API Gerenciada do EWS |
Atualizar um email |
Bind seguido por Update |
Atualizar um item usando a API Gerenciada do EWS |
Excluir um email |
Bind seguido por Delete |
Excluir um item usando a API Gerenciada do EWS |
Obter, atualizar ou excluir itens de email como delegado usando o EWS
Você pode usar a API Gerenciada do EWS para obter, atualizar ou excluir um email da mesma forma que executa essas ações quando não estiver usando o acesso de delegado. A única diferença é que o objeto de serviço é para o usuário delegado. A ID do item incluída na solicitação GetItem identifica exclusivamente o item no repositório de caixas de correio, na pasta Caixa de Entrada do proprietário da caixa de correio.
Tabela 3. Operações EWS para trabalhar com email como delegado
Tarefa | Operação do EWS | Exemplo de código |
---|---|---|
Obter um email |
GetItem |
Get um item usando EWS |
Atualizar um email |
GetItem seguido por UpdateItem |
Atualizar um item usando o EWS |
Excluir um email |
GetItem seguido por DeleteItem |
Excluir um item usando o EWS |