21 Replies Latest reply: Jun 16, 2016 7:24 AM by Rafael Marinho RSS

    Enviar Email

    Leonardo Osorio

      Eu procurei aqui na comunidade, mas achei um script para ser executado via Macro. Mas aqui nao funcionou. Alguem ja enviou email pelo qlikview??? E se sim, alguem ja conseguiu fazer isso após executar o script???

       

      Para enviar email achei o seguinte código

      function mailrapport(teste)

          Dim objEmail

          Const cdoSendUsingPort = 2     ' Send the message using SMTP

          Const cdoAnonymous = 0     'Do not authenticate

          Const cdoBasic = 1         'basic (clear-text) authentication

          Const cdoNTLM = 2         'NTLM

          SMTPServer =  "Seuemail@gmail.com"

          Const SMTPPort = 25                 ' Port number for SMTP

          Const SMTPTimeout = 60              ' Timeout for SMTP in seconds

          'Sending mail

          Set objEmail = CreateObject("CDO.Message")

          Set objConf = objEmail.Configuration

          Set objFlds = objConf.Fields

          With objFlds

              '---------------------------------------------------------------------

                 ' SMTP server details

                 .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort

                 .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer

                 .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoAnonymous

              .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPPort

              .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False

                .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = SMTPTimeout

                 .Update

              '---------------------------------------------------------------------

          End With

          objEmail.To = "Seuemail@gmail.com"      'Email Recipient

          objEmail.From = "Seuemail@gmail.com"                        'Email Sender

          objEmail.Subject = "The name of the report"                        ' Subject

          objEmail.TextBody = "some text in the body of the mail"        'Text Body         

          objEmail.AddAttachment = Nothing       ' Attachement

          objEmail.Send

          Set objFlds = Nothing

          Set objConf = Nothing

          Set objEmail = Nothing

      end function

        • Re: Enviar Email

          Boa tarde!

           

          Você não poderia simplesmente utilizar um disparador? É bem mais simples.

           

          Att.

          Rebeca Gums

          • Re: Enviar Email
            Fernando Suzuki

            O que eu já fiz foi o seguinte:

             

            1. no script, checo algumas condições e vou populando uma tabela com os parametros (Endereço, Assunto, Corpo do email) dos emails que quero enviar.

            Controle_Envio_Email:
            load  '$(sDestinatarios)' as sEmailTo,
                        '$(sDestinatariosBcc)' as sEmailBcc,
                        'QlikView - Alerta' as sEmailSubject,
                        '$(sEmailTextBody)' as sEmailTextBody
            autogenerate(1);
            

             

            2. depois, no final do script, faço um loop nessa tabela e para cada registro eu chamo a macro para enviar os emails

            if( NoOfRows('Controle_Envio_Email') > 0 ) then
                 let nEmails = NoOfRows('Controle_Envio_Email');
                 for y = 0 to nEmails - 1
                      let sEmailTo = peek('sEmailTo', y, 'Controle_Envio_Email');
                      let sEmailBcc = peek('sEmailBcc', y, 'Controle_Envio_Email');
                      let sEmailSubject = peek('sEmailSubject', y, 'Controle_Envio_Email');
                      let sEmailTextBody = peek('sEmailTextBody', y, 'Controle_Envio_Email');
              
                      // envia os os e-mails para os centros de custos.
                      let x = sendEmail('$(sEmailTo)', '$(sEmailBcc)', '$(sEmailSubject)', '$(sEmailTextBody)', '$(sSMTPServerIP)', '$(sSMTPServerPort)');
                 next
            end if
            

             

            3. E a macro é:

            function sendEmail(sEmailTo, sEmailBcc, sEmailSubject, sEmailTextBody, sSMTPServerIP, sSMTPServerPort) 
                      ' Object creation 
                      Set objMsg = CreateObject("CDO.Message")
                      Set msgConf = CreateObject("CDO.Configuration") 
              
                      '==This section provides the configuration information for the remote SMTP server.
                      ' Server Configuration 
                      msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
                      'Name or IP of Remote SMTP Server
                      msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = sSMTPServerIP
                      'Server port (typically 25)
                      msgConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = sSMTPServerPort
              
                      msgConf.Fields.Update 
              
                      ' Email 
            '          objMsg.Sender = "QlikView Service" 
                      objMsg.Sender = "" 
                      objMsg.From = "srv.qlikview@xxxxx.com.br" 
                      objMsg.To = sEmailTo
                      if len(sEmailBcc) > 0 then 
                                objMsg.Bcc = "srv.qlikview@xxxxx.com.br, " & sEmailBcc
                      else
                                objMsg.Bcc = "srv.qlikview@xxxxx.com.br"
                      end if
                      objMsg.Subject = sEmailSubject
                      objMsg.TextBody = sEmailTextBody
              
                      Set objMsg.Configuration = msgConf 
              
                      ' Send 
                      objMsg.Send 
              
                      ' Clear 
                      Set objMsg = nothing 
                      Set msgConf = nothing
            end function
            
            

             

            Obs: no começo do script eu defino o IP do servidor e porta:

            set sSMTPServerIP = '123.456.789.0';
            set sSMTPServerPort = 25;
            

             

            Obs2: É importante que na tela de Edição do Script, no painel inferior, aba Configurações, você marque a opção de permissão de execução de programas externos.

             

             

             

            Espero que isso te ajude.

            Abs

            Fernando

            • Re: Enviar Email
              Leonardo Osorio

              Obrigado Fernando, eu adaptei seu código aqui,e está rodando que é uma beleza....

              • Re: Enviar Email
                Luciano Vasconcelos

                Funciona sim.

                 

                Boa tarde.

                Segue script abaixo:

                Function Mail_Report()

                Set obj = ActiveDocument.ActiveSheet.SheetObjects("TX63")
                Set obj1 = ActiveDocument.ActiveSheet.SheetObjects("TX64")
                Set obj2 = ActiveDocument.ActiveSheet.SheetObjects("CH42")
                Set obj3 = ActiveDocument.ActiveSheet.SheetObjects("CH44")
                'Export entire Sheet
                'Set obj = ActiveDocument.ActiveSheet
                obj.ExportBitmapToFile "D:\\TestImage.jpg"
                obj1.ExportBitmapToFile "D:\\TestImage1.jpg"
                'obj2.ExportBitmapToFile "D:\\TestImage2.jpg"
                obj3.ExportBitmapToFile "D:\\TestImage3.jpg"

                Dim objEmail

                Const cdoSendUsingPort = 2
                Const cdoAnonymous = 1
                Const cdoBasic = 1
                Const cdoNTLM = 2

                SMTPServer = "smtp.gmail.com"

                Const SMTPPort = 465
                Const SMTPTimeout = 60

                Set objEmail = CreateObject("CDO.Message")
                Set objConf = objEmail.Configuration
                Set objFlds = objConf.Fields
                  set doc = ActiveDocument
                set mySelections = doc.fields("Enviar_email_para").GetSelectedValues

                for i = 0 to mySelections.Count - 1
                email = email & mySelections.Item(i).text & ";"
                next

                destinatarios = email & ";XXXXXX@XXXX.com.br;XXXX.XXX@XXXXcom.br"
                msgbox(email)

                With objFlds
                .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
                .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
                .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoAnonymous
                .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPPort
                .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "XXXXX@ig.com.br"
                .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "XXXXX"
                .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
                .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = SMTPTimeout
                .Update
                End With

                objEmail.To = destinatarios
                objEmail.From = "XXXX@ig.com.br"
                objEmail.Bcc = "XXXX@ig.com.br" 'com cópia oculta
                objEmail.Subject = "Relatório Diário"    

                HTML = "<!DOCTYPE HTML PUBLIC ""-//IETF//DTD HTML//EN"">" & chr(13) & chr(10)
                HTML = HTML & "<html>"
                HTML = HTML & "<head>"
                HTML = HTML & "<meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1"">"
                HTML = HTML & "<title>Relatório!</title>"
                HTML = HTML & "</head>"
                HTML = HTML & "<body bgcolor=""#FFFFFF"">"

                'html tag to include image
                HTML = HTML & "<p>Prezada XXX,"
                HTML = HTML & "<p>Segue listagem."
                HTML = HTML & "<p>"
                HTML = HTML & "<p>   <img src=""cid:TestImage.jpg"" > <br>"
                HTML = HTML & "<p>   <img src=""cid:TestImage1.jpg"" > <p>"
                HTML = HTML & "<p>   <img src=""cid:TestImage2.jpg"" > <P>"
                HTML = HTML & "<p>   <img src=""cid:TestImage3.jpg"" > <br>"
                HTML = HTML & "<p>"
                HTML = HTML & "</body>"
                HTML = HTML & "</html>"

                'code to embed the image by uploading into the mail body
                Set objBP = objEmail.AddRelatedBodyPart("D:\\TestImage.jpg", "TestImage.jpg", CdoReferenceTypeName)
                objBP.Fields.Item("urn:schemas:mailheader:Content-ID") = "<TestImage.jpg>"
                objBP.Fields.Update
                Set objBP1 = objEmail.AddRelatedBodyPart("D:\\TestImage1.jpg", "TestImage1.jpg", CdoReferenceTypeName)
                objBP.Fields.Item("urn:schemas:mailheader:Content-ID") = "<TestImag1e1.jpg>"
                objBP.Fields.Update
                ' Set objBP2 = objEmail.AddRelatedBodyPart("D:\\TestImage2.jpg", "TestImage2.jpg", CdoReferenceTypeName)
                '    objBP.Fields.Item("urn:schemas:mailheader:Content-ID") = "<TestImag1e2.jpg>"
                '    objBP.Fields.Update
                'Set objBP3 = objEmail.AddRelatedBodyPart("D:\\TestImage3.jpg", "TestImage3.jpg", CdoReferenceTypeName)
                'objBP.Fields.Item("urn:schemas:mailheader:Content-ID") = "<TestImag1e3.jpg>"
                'objBP.Fields.Update

                objEmail.HTMLBody = HTML

                objEmail.Send


                Set objFlds = Nothing
                Set objConf = Nothing
                Set objEmail = Nothing

                msgbox("Relatório enviado!")

                end function

                Os objetosabaixo devem estar no qvw:

                "TX63"
                "TX64"
                "CH42"
                "CH44"


                O servidor de email precisa estar configurado no server, caso seja executado nele. No restante é só modificar e-mails, portas e senhas, além de dar permissão de execução de macro para o qvw.