Função que abre o Outlook via função do AdvPL

Olá pessoal…

Hoje vou mostrar uma função desenvolvida para abrir uma nova mensagem do Outlook via AdvPL.

AdvPL

AdvPL

Essa função serve, caso você queira facilitar para algum usuário digitar algum e-mail para vendedor, ou para algum cliente, onde você já tem o campo de e-Mail.

Basta passar o e-Mail para essa função, que ele abre a tela com uma nova mensagem.

Abaixo o código fonte desenvolvido.

Update Dezembro de 2022:

Foi feito uma atualização no código para que seja possível enviar arquivos em anexo.

//Bibliotecas
#Include "TOTVS.ch"
 
/*/{Protheus.doc} zOutlook
Função que abre o outlook para escrever um novo e-mail
@type function
@author Atilio
@since 14/04/2017
@version 1.0
    @param cEmail,   Caractere, Endereço de e-Mail
    @param cAssunto, Caractere, Assunto do e-Mail
    @param cCorpo,   Caractere, Corpo do e-Mail
    @param cAnexo,   Caractere, Caminho do arquivo que existe no S.O.
    @example
    u_zOutlook("suporte@terminaldeinformacao.com")
    u_zOutlook(SA3->A3_EMAIL)
    @obs Caso queira ver a opção de adicionar assunto ou corpo do e-Mail, veja
    https://support.microsoft.com/pt-br/help/287573/how-to-use-command-line-switches-to-create-a-pre-addressed-e-mail-message-in-outlook

    Exemplo de comando direto no MS-DOS:
    C:\Program Files\Microsoft Office\root\Office16> outlook.exe /c ipm.note /m "email@empresa.com?subject=assunto&body=ola, %0D%0A tudo joia" /a "c:\spool\tst.txt"
/*/
 
User Function zOutlook(cEmail, cAssunto, cCorpo, cAnexo)
    Local cExecute := "/c ipm.note /m "
    Default cEmail := ""
    Default cAssunto := ""
    Default cCorpo := ""
    Default cAnexo := ""
    
    //Se tiver email, abre o outlook
    If !Empty(Alltrim(cEmail)) .And. ! Empty(cAssunto) .And. ! Empty(cCorpo)
        //Muda o -enter- e tira aspas
        cCorpo := StrTran(cCorpo, CRLF, " %0D%0A ")
        cCorpo := StrTran(cCorpo, '"', '')

        //Monta o comando
        cExecute += '"'
        cExecute += cEmail
        cExecute += '?subject=' + cAssunto
        cExecute += '&body=' + cCorpo
        cExecute += '"'

        //Se tiver anexo
        If ! Empty(cAnexo) .And. File(cAnexo)
            cExecute += ' /a "' + cAnexo + '"'
        EndIf

        //Abre a tela do outlook
        ShellExecute("OPEN", "outlook.exe", cExecute, "", 1)
    EndIf
Return

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

12 Responses

  1. Wendel Borges disse:

    Boa noite Atilio,
    Parabéns pela postagem, vai me ajudar muito. Gostaria de tirar uma dúvida… Irei executar esta função, mas preciso anexar um arquivo pdf, saberia informa se tem como fazer? O Objetivo é que a tela de envio do outlook seja aberta já com o e-mail do destinatário preenchido que irei passar como parâmetro e com um arquivo em anexo, arquivo esse que estará numa pasta no disco rígido local da máquina do usuário.

    Grato pela atenção!

  2. Arthur Silva disse:

    Boa tarde Atílio, tudo bem?

    Muito bom esse recurso e a postagem!

    Consegue me dizer como que eu posso trazer o outlook já com o corpo do email preenchido?

    att,
    Arthur Silva

  3. Joao Marcos Magnez Coelho disse:

    E se eu quisesse enviar 3 arquivos em anexo?

  4. Joao Marcos Magnez Coelho disse:

    Boa tarde, já chegou a fazer algo assim? teria algum exemplo pra me enviar? Ficaria muito agradecido!

  5. Pierry Guedes disse:

    Dan, boa tarde
    Eu to fazendo algo parecido, mas queria garantir que o ShellExecute só fosse chamado, se eu confirmasse que existe o Outlook instalado naquela máquina.
    Tentei utilizar o ApOleClient, passando os parâmetros “OUTLOOK” e “MSOUTLOOK” mas mesmo com o programa instalado retorno foi .F.
    Tens ideia de como daria pra fazer essa validação ?
    Desde já, obrigado.

  6. Wagner Silva Santos disse:

    Boa tarde, este código estão sendo muito útil para minhas aplicações, só me fica um dúvida, não consegui criar o e-mail usando um código HTML para o corpo do e-mail, tipo como inserir uma tabela ou imagens. hoje já consigo fazer isso usando o TMailMessage(), mas nesse caso o usuário não consegue visualizar a mensagem antes do envio.

    • Bom dia Wagner, tudo bem?
      Então, dessa forma por linha de comando, não sei dizer se o Outlook tem alguma parametrização que entenda. Pesquisei no Google por “html body command line outlook” mas todas as respostas que eu encontrava, diziam que não era possível.
      Achei uma até que disse que no Thunderbird tem um parâmetro chamado “html-body”, mas no Outlook não.
      Se eu encontrar algo te aviso, mas creio que realmente não tenha isso por linha de comando.

Deixe uma resposta

Terminal de Informação