Olá pessoal…
Hoje vou mostrar uma função desenvolvida para abrir uma nova mensagem do Outlook via 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.
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!
Boa noite Wendel, tudo bem?
Sim é possível, você teria que passar o arquivo por parâmetro, por exemplo:
Um grande abraço.
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
Bom dia Arthur, estou bem graças a Deus e você?
Então, na própria função tem um link de apoio da Microsoft – https://support.microsoft.com/pt-br/help/287573/how-to-use-command-line-switches-to-create-a-pre-addressed-e-mail-message-in-outlook
O comando então, ficaria +- assim:
Onde você deve informar o texto do body.
Um grande abraço.
E se eu quisesse enviar 3 arquivos em anexo?
Eu acho João, que apenas se você integrar com PowerShell, pesquisando achei esse link:
https://stackoverflow.com/questions/32320932/adding-multiple-attachments-to-email-sent-through-windows-command-line
Abraços.
Boa tarde, já chegou a fazer algo assim? teria algum exemplo pra me enviar? Ficaria muito agradecido!
Infelizmente nunca desenvolvi algo assim =/. Teria que estudar a documentação e fazer mesmo.
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.
Boa noite, tudo bem?
Eu acho que pela ApOleClient não irá funcionar.
Talvez você teria que fazer manualmente vendo um registro do Windows, achei os seguintes exemplos:
c++: https://stackoverflow.com/questions/1366217/check-if-outlook-is-installed-on-pc
java: https://stackoverflow.com/questions/22804519/how-to-check-whether-outlook-is-install-in-system-or-not-using-java
vb: https://www.extendoffice.com/documents/outlook/5429-check-if-outlook-is-installed.html
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.