Compartilhar via


Anexar um item de contato do Outlook a uma mensagem de Email

Este tópico descreve como você pode anexar programaticamente uma cópia de um item do Microsoft Outlook, como um contato, um item de calendário ou outra mensagem de email, a uma mensagem de email antes de enviar a mensagem.

Fornecido por: Ken Getz, MCW Technologies, LLC

Para anexar um ou mais arquivos ou itens do Outlook a uma mensagem de email, você pode usar a propriedade Anexos do objeto MailItem que representa seu email de saída e chamar o método Add(Object, Object, Object, Object, Object) do objeto Attachments para cada um dos anexos. O método Add permite que você especifique o nome do arquivo e como deseja associar o anexo. Para anexar itens do Outlook, como o item de contato mostrado no código de exemplo para este tópico, especifique o parâmetroType do método Add como o valor enumerado Outlook.olAttachmentType.olEmbeddedItem .

O SendMailItem procedimento de exemplo no exemplo de código posteriormente neste tópico aceita o seguinte:

  • Uma referência ao objeto aplicativo do Outlook.

  • Cadeias de caracteres que contenham o assunto e o corpo da mensagem.

  • Uma lista genérica de cadeias de caracteres que contêm os endereços SMTP para destinatários da mensagem.

  • Uma cadeia de caracteres que contenha o endereço SMTP do remetente.

Depois de criar um novo item de email, o código passa por todos os endereços do destinatário, adicionando cada um à coleção Destinatários da mensagem. Depois que o código chama o método ResolveAll() do objeto Destinatários , ele define as propriedades Assunto e Corpo do item de email. Em seguida, o código cria um novo objeto Outlook ContactItem e adiciona esse novo item de contato como um anexo à mensagem de email, especificando o valor Outlook.olAttachmentType.olEmbeddedItem como um parâmetro para a chamada do método Add . Antes de realmente enviar o email, você deverá especificar a conta da qual a mensagem de email será enviada. Uma técnica para descobrir essa informação é ver o endereço SMTP do remetente. A GetAccountForEmailAddress função aceita uma cadeia de caracteres que contém o endereço de email SMTP do remetente e retorna uma referência para o objeto Conta correspondente. Esse método compara o endereço SMTP do remetente com o SmtpAddress para cada conta de email configurada definida para o perfil da sessão. application.Session.Accounts retorna uma coleção Contas para o perfil atual, acompanhando informações de todas as contas, incluindo contas Exchange, IMAP e POP3, cada uma das quais pode ser associada a um repositório de entrega diferente. O objeto Account com um valor de propriedade SmtpAddress associado que corresponder ao endereço SMTP do remetente será a conta a ser usada no envio da mensagem de email. Depois de identificar a conta apropriada, o código é concluído definindo a propriedade SendUsingAccount do item de email para esse objeto Account e chamando o método Send(). The following managed code samples are written in C# and Visual Basic. To run a .NET Framework managed code sample that needs to call into a Component Object Model (COM), you must use an interop assembly that defines and maps managed interfaces to the COM objects in the object model type library. For Outlook, you can use Visual Studio and the Outlook Primary Interop Assembly (PIA). Before you run managed code samples for Outlook 2013, ensure that you have installed the Outlook 2013 PIA and have added a reference to the Microsoft Outlook 15.0 Object Library component in Visual Studio. Você deve usar os exemplos de código a ThisAddIn seguir na classe de um suplemento do Outlook (usando ferramentas de desenvolvedor do Office para Visual Studio). The Application object in the code must be a trusted Outlook Application object provided by ThisAddIn.Globals. For more information about using the Outlook PIA to develop managed Outlook solutions, see the Outlook 2013 Primary Interop Assembly Reference on MSDN. O código a seguir mostra como anexar programaticamente uma cópia de um item de contato a uma mensagem de email. Para demonstrar essa funcionalidade, no Visual Studio, crie um novo suplemento gerenciado do Outlook chamado EmbedOutlookItemAddIn, e substitua o conteúdo do arquivo ThisAddIn.vb ou ThisAddIn.cs pelo código de exemplo mostrado aqui. Modifique o ThisAddIn_Startup procedimento e atualize os endereços de email adequadamente. O endereço SMTP incluído na chamada para o SendMailWithAttachments procedimento deve corresponder ao endereço SMTP de uma das contas de email de saída que você configurou anteriormente no Outlook.

using System;
using System.Collections.Generic;
using Outlook = Microsoft.Office.Interop.Outlook;
 
namespace EmbedOutlookItemAddIn
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            List<string> recipients = new List<string>();
            recipients.Add("john@contoso.com");
            recipients.Add("john@example.com");
 
            // Replace the SMTP address for sending.
            SendMailItem(Application, "Outlook started", "Outlook started at " + 
                DateTime.Now, recipients, "john@contoso.com");
        }
 
        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }
 
        public void SendMailItem(Outlook.Application application, 
            string subject, string body, 
            List<string> recipients, string smtpAddress)
        {
 
            Outlook.MailItem newMail = 
                application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
 
            // Set up all the recipients.
            foreach (var recipient in recipients)
            {
                newMail.Recipients.Add(recipient);
            }
            if (newMail.Recipients.ResolveAll())
            {
                // Set the details.
                newMail.Subject = subject;
                newMail.Body = body;
 
                Outlook.ContactItem contact = (Outlook.ContactItem)(application.CreateItem
                    Outlook.OlItemType.olContactItem));
 
                // Create a new contact. Use an existing contact instead, 
                // if you have one to work with.
                contact.FullName = "Kim Abercrombie";
                contact.LastName = "Kim";
                contact.FirstName = "Abercrombie";
                contact.HomeTelephoneNumber = "555-555-1212";
                contact.Save();
 
                newMail.Attachments.Add(contact, Outlook.OlAttachmentType.olEmbeddeditem);
                newMail.SendUsingAccount = GetAccountForEmailAddress(application, smtpAddress);
                newMail.Send();
             }
          }
 
        public Outlook.Account GetAccountForEmailAddress(Outlook.Application application, 
            string smtpAddress)
        {
            // Loop over the Accounts collection of the current Outlook session.
            Outlook.Accounts accounts = application.Session.Accounts;
            foreach (Outlook.Account account in accounts)
            {
                // When the email address matches, return the account.
                if (account.SmtpAddress == smtpAddress)
                {
                    return account;
                }
             }
             // If you get here, no matching account was found.
             throw new System.Exception(string.Format("No Account with SmtpAddress: {0} exists!",
                 smtpAddress));
        }
    }
 
    #region VSTO generated code
 
    /// <summary>
    /// Required method for Designer support - don't modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InternalStartup()
    {
        this.Startup += new System.EventHandler(ThisAddIn_Startup);
        this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
    }
        
    #endregion
 
}
Public Class ThisAddIn
 
    Private Sub ThisAddIn_Startup() Handles Me.Startup
        Dim recipients As New List(Of String)
        recipients.Add("john@contoso.com")
        recipients.Add("john@example.com")
     
        ' Replace the SMTP address for sending.
        SendMailItem(Application, "Outlook started",
            "Outlook started at " & DateTime.Now, recipients,
            "john@contoso.com")
    End Sub
 
    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
 
    End Sub
 
    Private Sub SendMailItem(ByVal application As Outlook.Application, _
        ByVal subject As String, ByVal body As String, ByVal recipients As List(Of String), _
        ByVal smtpAddress As String)
 
        Dim newMail As Outlook.MailItem = _
            DirectCast(application.CreateItem(Outlook.OlItemType.olMailItem), _
            Outlook.MailItem)
 
        ' Set up all the recipients.
        For Each recipient In recipients
            newMail.Recipients.Add(recipient)
        Next
        If newMail.Recipients.ResolveAll() Then
          ' Set the details.
          newMail.Subject = subject
          newMail.Body = body
 
          Dim contact As Outlook.ContactItem =_
             DirectCast(application.CreateItem(
             Outlook.OlItemType.olContactItem), Outlook.ContactItem)
 
          ' Create a new contact. Use an existing contact instead, 
          ' if you have one to work with.
          contact.FullName = "Kim Abercrombie"
          contact.LastName = "Kim"
          contact.FirstName = "Abercrombie"
          contact.HomeTelephoneNumber = "555-555-1212"
          contact.Save()
 
          newMail.Attachments.Add(contact, Outlook.OlAttachmentType.olEmbeddeditem)
          newMail.SendUsingAccount = GetAccountForEmailAddress(application, smtpAddress)
          newMail.Send()
        End If
    End Sub
 
    Private Function GetAccountForEmailAddress(ByVal application As Outlook.Application,_
        ByVal smtpAddress As String) As Outlook.Account
        ' Loop over the Accounts collection of the current Outlook session.
        Dim accounts As Outlook.Accounts = application.Session.Accounts
        For Each account In accounts
            ' When the email address matches, return the account.
            If account.SmtpAddress = smtpAddress Then
                Return account
            End If
        Next
        ' If you get here, no matching account was found.
        Throw New System.Exception(_
            String.Format("No Account with SmtpAddress: {0} exists!", smtpAddress))
    End Function
End Class

Confira também

Anexar um arquivo a um item de emaillimitar o tamanho de um anexo a uma mensagem do Outlook EmailModificar um anexo de uma mensagem do Outlook Email

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.