Olá pessoas Excelentes.

Antes de iniciarem a leitura deste artigo, leiam a primeira parte da matéria, pois os conceitos iniciais foram explicados lá, ok.

Dando prosseguimento ao tutorial para enviar emails diretamente da sua planilha no Excel com o uso da biblioteca Microsoft CDO (cdosys.dll), hoje, vou explicar como anexar arquivos à mensagem de email e como enviar múltiplos emails de uma listagem contida em sua planilha.

Vou focar este artigo nos procedimentos de envio de email, caso você queira saber como gerar arquivos dinamicamente para anexar em suas mensagens, sugiro que leia estes artigos:

Criar um novo arquivo automaticamente

Enviar planilha por email diretamente do Excel

Salvar planilha como arquivo de texto (.txt)

Anexando arquivos

Para anexarmos arquivos na mensagem, vamos utilizar a propriedade setEmailAnexo da nossa classe clsEmail que criamos no artigo anterior.

Essa propriedade irá anexar, um a um, todos os arquivos que nós carregarmos no array vAnexos, que em nosso exemplo, será populado através da caixa Anexar Arquivos que inicializaremos pelo comando GetOpenFilename.

Vejamos o código para que você possa entender mais claramente.

Sub EnviarEmailComAnexo()
Dim objEmail As clsEmail
Dim vAnexos As Variant
Dim sh As Worksheet
Dim vNomeTemp As Variant

On Error GoTo Erro_Sub

    Set objEmail = New clsEmail                 'Inicializa a classe clsEmail
    Set sh = Sheets("PlanEmailComAnexo")        'Define a planilha

    'Fazendo uma validação simples. Se o email do destinatário foi informado
    If Len(Trim(sh.Range("C8"))) = 0 Then
        MsgBox "Informe o email do destinatário.", vbInformation
        Exit Sub
    End If
    If Len(Trim(sh.Range("C6"))) = 0 Then
        vNomeTemp = Split(sh.Range("C8"), "@")
        sh.Range("C6").value = vNomeTemp(0)
    End If

    With objEmail
        .setConfEmailServidor = "smtp.seuservidor.com.br"       'Servidor de saída de emails. Ex: smtp.uol.com.br
        .setConfEmailPorta = "25"                               'Porta. Padrão é a porta 25
        .setConfEmailSSL = false                                'Se necessita conexão segura SSL
        .setConfEmailFrom = "seu-email@seuservidor.com.br"      'Seu email: O remetente do email. Ex: seunome@uol.com.br
        .setConfEmailSenha = "sua-senha"                        'Sua senha: A senha que você usa para acessar seus emails
        .setConfEmailFromNome = "Seu Nome"                      'Seu nome: O nome que será exibido no campo De:
        .Configurar     'Executa a configuração

        .setEmailTo = sh.Range("C8")                            'Email do Destinatário
        .setEmailToNome = sh.Range("C6")                        'Nome do Destinatário

        .setEmailTitulo = "Aprendendo a enviar emails diretamente do Excel - Com Anexo"     'Título da mensagem

        'Aqui, você deve digitar o conteúdo. Pode utilizar formatação HTML.
        .setEmailConteudo = "Olá, <strong>" & .getEmailToNome & "</strong>.<br><br>Estou aprendendo muito aqui no site <a href=""http://www.exceldoseujeito.com.br"">Excel do Seu Jeito</a>." _
                            & "<br><br>Acesse <a href=""http://www.exceldoseujeito.com.br"">http://www.exceldoseujeito.com.br</a> e fique expert no Excel."

        vAnexos = Application.GetOpenFilename(Title:="Anexar arquivos", MultiSelect:=True)

        If IsArray(vAnexos) Then
            .setEmailAnexo = vAnexos
        End If

        .EnviarEmail        'Executa o envio do Email

    End With

    Set objEmail = Nothing

    MsgBox "Email enviado com sucesso!", vbInformation

Exit Sub
Erro_Sub:
    MsgBox Err.Description, vbExclamation
    Exit Sub
End Sub

Não esqueça de fazer as alterações necessárias com suas credenciais de acesso de email SMTP, do título da mensagem e conteúdo. Nada impede que você modifique o código para buscar estas informações na sua própria planilha, onde você pode definir estes dados de smtp, título e conteúdo da mensagem em células da mesma forma que o nome e email do destinatário.

Crie uma planilha nomeada “PlanEmailComAnexo” como a da figura a seguir.

 

Atribua a macro que acabamos de criar ao botão Enviar, assim:

 

Pronto. Agora insira o nome e o email do destinatário. Ao clicar em Enviar, será solicitado que você informe os anexos. Selecione os arquivos que deseja enviar e clique em Abrir.

 

Enviando vários Emails a partir de uma lista de contatos

Outra necessidade que muitos leitores costumam comentar é a possibilidade de enviar múltiplos emails. Ou seja, a partir de uma tabela contendo várias pessoas para receber determinada mensagem, seja um relatório de vendas para cada gerente, seja uma tabela de preços para cada vendedor de acordo com o departamento em que atua, enfim, diversas situações que podem ser programadas especificamente para cada caso.

Neste exemplo, vou mostrar como percorrer uma listagem de contatos e enviar um email personalizado para cada destinatário. Digo personalizado porque cada mensagem vai com o nome da pessoa no conteúdo da mensagem – e poderia ser qualquer informação específica, como as citadas acima.

O processo é bem parecido com os anteriores, a diferença é a inclusão de um laço de repetição da rotina para cada item da lista. O comando de repetição irá fazer quantos envios forem necessários de acordo com a quantidade de emails na lista.

Apenas tenha cuidado quanto aos limites de seu servidor de emails, porque existem algumas regras para evitar a prática de SPAM. Verifique o seu caso e implemente soluções para evitar um possível bloqueio. Você pode utilizar comandos de controle de tempo como o Wait para controlar a frequência de envios.

Vejamos o código.

Sub EnviarVariosEmails()
Dim objEmail As clsEmail
Dim sh As Worksheet
Dim vNomeTemp As Variant
Dim sNomeTo As String
Dim sEmailTo As String
Dim sStatus As String
Dim iLinhaInicial As Long
Dim iLinhaFinal As Long
Dim i As Long

On Error GoTo Erro_Sub

    Set objEmail = New clsEmail                 'Inicializa a classe clsEmail
    Set sh = Sheets("PlanListaDeEmails")        'Define a planilha

    With objEmail
        .setConfEmailServidor = "smtp.seuservidor.com.br"       'Servidor de saída de emails. Ex: smtp.uol.com.br
        .setConfEmailPorta = "25"                               'Porta. Padrão é a porta 25
        .setConfEmailSSL = false                                'Se necessita conexão segura SSL
        .setConfEmailFrom = "seu-email@seuservidor.com.br"      'Seu email: O remetente do email. Ex: seunome@uol.com.br
        .setConfEmailSenha = "sua-senha"                        'Sua senha: A senha que você usa para acessar seus emails
        .setConfEmailFromNome = "Seu Nome"                      'Seu nome: O nome que será exibido no campo De:
        .Configurar     'Executa a configuração

        'Percorre a listagem de emails para enviar
        iLinhaInicial = 8                                                       'Informe a linha que começa a lista de emails
        iLinhaFinal = sh.Range("A1").SpecialCells(xlCellTypeLastCell).Row       'Recupera automaticamente a última linha da tabela

        For i = iLinhaInicial To iLinhaFinal
            Application.StatusBar = "Enviando email " & (i - iLinhaInicial + 1)

            sNomeTo = Trim(sh.Range("B" & i))
            sEmailTo = Trim(sh.Range("C" & i))

            If Len(sEmailTo) = 0 Then   'Verifica se o email do destinatário foi informado
                sStatus = "Informe o email do destinatário."
            Else
                If Len(sNomeTo) = 0 Then    'Verifica se um nome foi informado
                    vNomeTemp = Split(sEmailTo, "@")
                    sNomeTo = vNomeTemp(0)
                End If

                .setEmailTo = sEmailTo                           'Email do Destinatário
                .setEmailToNome = sNomeTo                        'Nome do Destinatário

                .setEmailTitulo = "Aprendendo a enviar emails diretamente do Excel"     'Título da mensagem

                'Aqui, você deve digitar o conteúdo. Pode utilizar formatação HTML.
                .setEmailConteudo = "Olá, <strong>" & .getEmailToNome & "</strong>.<br><br>Estou aprendendo muito aqui no site <a href=""http://www.exceldoseujeito.com.br"">Excel do Seu Jeito</a>." _
                                    & "<br><br>Acesse <a href=""http://www.exceldoseujeito.com.br"">http://www.exceldoseujeito.com.br</a> e fique expert no Excel."

                .EnviarEmail

                sStatus = "Email enviado com sucesso!"
            End If

            sh.Range("D" & i) = sStatus     'Escreve o status do envio
        Next i

    End With

    Set objEmail = Nothing
    Set sh = Nothing

    Application.StatusBar = False
    MsgBox "Emails enviados", vbInformation

Exit Sub
Erro_Sub:
    MsgBox Err.Description, vbExclamation
    Exit Sub
End Sub

Crie uma planilha para inserir sua lista de contatos como a figura abaixo.

 

Da mesma maneira que no exemplo anterior, atribua a macro criada ao botão que irá acioná-la.

 

Bom pessoal, então é isso.

O artigo ficou um pouco extenso, mas é simples. Não se preocupem. Baixem o arquivo com os exemplos utilizados aqui e testem, modifiquem e estudem em cima deles. Qualquer dúvida postem aqui nos comentários, vou tentar responder a todos, dentro do possível.

Curtam, twittem, compartilhem e sigam o blog nas suas redes sociais e ajudem a divulgá-lo, ok… Agradeço a ajuda de vocês.

Um abraço e até a próxima.

 

Antes de efetuar o download do arquivo de exemplo, convido você a socializar conosco.

Escolha uma das opções abaixo. Seguir no twitter, assinar nossa Newsletter...

Isso nos ajuda na divulgação do site e te permite ficar sempre atualizado das novidades. Fico muito grato pela sua colaboração.

Digite seu email:

Você receberá um email para ativar o cadastro, ok!