Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
rafaelmarinho05
Contributor III
Contributor III

Erro Macro Gatilho de Email - CreateObject("CDO.Message")

Bom dia Pessoal,

Passei 5 anos afastado no Desenvolvimento Qlikview, e na época tinha desenvolvido esse gatilho normalmente.

Agora retornei para o Qlikview e surgiu uma demanda para criação desses gatilhos. Porém vi que tem muitos fóruns de discussão, mas todos bem antigos que utiliza CDO.MESSAGE schema de configuração da Microsoft.

Consegui implementar uma aplicação  utilizando a criação do objeto outlook.

  Set myApp = CreateObject ("Outlook.Application")

  Set myMessage = myApp.CreateItem(olMailItem)

Porém nos testes que uso da erro de criação do Objeto "O componente do ActiveX não pode criar objeto"

Set objMsg = CreateObject("CDO.Message")

Set msgConf = CreateObject("CDO.Configuration")

Aqui utilizamos o Thunderbird, instalei o OUTLOOK para fazer testes, na primeira implementação utilizando Outlook.Application deu certo, Já no CDO.Message não.


Vi que esse componente não vem mais integrado ao Outlook, e no site da microsoft mostra algo como descontinuado.


Hoje, qual melhor prática é adotada e utilizado para que vocês usam para implementar os Gatilhos ?

Labels (3)
10 Replies
nicolett_yuri

Você deu permissão para a macro executar?

Ctrl + M

Modo de segurança requerido: Acesso ao sistema

Segurança local atual: Permitir acesso ao sistema

rafaelmarinho05
Contributor III
Contributor III
Author

Dei sim, ja testei Ctrl+ M / Ctrl+ shift M mas continua....

nicolett_yuri

Segue um exemplo de macro (funcionando)

Dim objEmail
Const cdoSendUsingPort = 2 ' Send the message using SMTP
Const cdoBasic = 0 'basic (clear-text) authentication
Const cdoNTLM = 2 'NTLM
Const SMTPServer = "IPDOSEUSERVIDORSMTP"
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") = cdoBasic
.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
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "E-MAIL-ORIGEM"
.Update
'---------------------------------------------------------------------
End With

objEmail.To = "E-MAIL-DESTINO"
objEmail.From = "E-MAIL-ORIGEM"
objEmail.Subject = "TESTANDO EMAIL"
    objEmail.TextBody = "TESTE 01"
objEmail.Send
Set objFlds = Nothing
Set objConf = Nothing
Set objEmail = Nothing
rafaelmarinho05
Contributor III
Contributor III
Author

Boa tarde Yuri,

Fiz uma aplicação de teste com esse seu exemplo.

Aparece o erro "O componente ActiveX não consegue criar o objecto: 'CDO.Message'" !

nicolett_yuri

mande um print da sua tela de macro

rafaelmarinho05
Contributor III
Contributor III
Author

Os erros ficam oscilando, agora apareceu esse : O servidor rejeitou o endereço do remetente. A resposta do servidor foi: 530 5.7.0 Authentication required.

modulo.PNG

nicolett_yuri

Seu servidor SMTP não possui relay aberta, por isso pede autenticação.

Para passar autenticação você precisa alterar algumas coisas no script, segue exemplo:

Dim objEmail
Const cdoSendUsingPort = 2 ' Send the message using SMTP
Const cdoBasic = 1 'basic (clear-text) authentication
Const cdoNTLM = 2 'NTLM
Const SMTPServer = "seu.servidor.smtp"
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") = cdoBasic
.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
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "email.rementente"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "senha"
.Update
'---------------------------------------------------------------------
End With

objEmail.To = "email.destinatario"
objEmail.From = "email.remetente"
objEmail.Subject = "TESTANDO EMAIL"
    objEmail.TextBody = "TESTE 01"
objEmail.Send
Set objFlds = Nothing
Set objConf = Nothing
Set objEmail = Nothing
rafaelmarinho05
Contributor III
Contributor III
Author

Yuri, preciso fechar esse código como por ex.

function Gatilho()

end function

Pq está travando agora a aplicação de teste, fica executando e depois para... e não envia o email

nicolett_yuri

Sim, você precisa colocar esse código dentro de uma SUB ou Function.