Notifications
Clear all

Dificuldade com envio de e-mail automático ".from"

5 Posts
3 Usuários
0 Reactions
4,385 Visualizações
(@sergio-vilar)
Posts: 11
Active Member
Topic starter
 

Caros, boa tarde.

Gostaria da ajuda de vocês com algo que estou com dificuldade e após muita pesquisa não consegui encontrar uma solução.

Tentei varias alternativas, porem vou postar 2 métodos diferentes que utilizei mas que não funcionaram.

Eu tenho duas caixas de correio pela qual envio meus relatórios. E preciso habilitar o item "De:" no código para colocar outro e-mail no lugar.
Quanto executo ele da o seguinte erro: O objeto não aceita está propriedade ou método.

1º Código foi retirado aqui do planilhando mesmo que o Wagner postou.

Sub EMail_Automático()
    '==========================================================
    'PARA REMESSA DE E-MAIL AUTOMÁTICO DE DENTRO DAS APLICAÇÕES
    '==========================================================

    Dim olApp As Object, olMail As Object
   ' If Range("B1").Value >= Range("a1").Value Then
        Set olApp = CreateObject("Outlook.Application")
        Set olMail = olApp.CreateItem(0)
    
        olMail.From = "meuoutroemail@email.com.br"
        olMail.Subject = "e-mail com from habilitado" 'Campo Assunto
        olMail.Body = "Teste2" 'Campo referente a mensagem que se quer enviar
        olMail.To = "destinatario@email.com.br" 'Endereços dos destinatários
        'olMail.cc = "F114170" 'Campo Com cópia
        'olMail.Attachments.Add "C:/CONFIG.SYS" 'Arquivo a inserir
        olMail.Send 'Envio direto. Se quiser ver primeiro o e-mail para depois enviar, substitua _
        esse comando por Display
        
        Set olApp = Nothing
        Set olMail = Nothing
    'End If
End Sub

2º Código. Este eu já utilizava por ser mais simples e sempre funcionou, porem o item "De: /.From" não funciona.

Sub envia_email()
    de = Range("a2").Value
    para = Range("b2").Value
    copia = Range("c2").Value
    assunto = Range("d2").Value

       ActiveWorkbook.EnvelopeVisible = True
            With ActiveSheet.MailEnvelope
                .SentOnBehalfOfName = "Test"
                '.Introduction = ""
                .Item.Attachments.Add ThisWorkbook.Path & "Arquivo.xlsm"
                .Item.From = de
                .Item.To = para
                .Item.Cc = copia
                .Item.Subject = assunto
                .Item.Send
            End With
            ActiveWorkbook.EnvelopeVisible = False
        ActiveWindow.SelectedSheets.Visible = False
 
End Sub
 
Postado : 05/03/2013 11:01 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Sérgio,

Boa Tarde!

Utile o código abaixo. Ele utiliza o objeto CDO que dispensa o Outlook. Nele, é possível utilizar o comando para informar que está enviando a mensagem (objCDOSYSMail.From).

Sub EMail()
    Dim msgf As String

    'Configurando os dados do E-mail
    Set objCDOSYSMail = CreateObject("CDO.Message")
    Set objCDOSYSCon = CreateObject("CDO.Configuration")
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "D001COR02"
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
    objCDOSYSCon.Fields.Update
    Set objCDOSYSMail.Configuration = objCDOSYSCon


    'Configurando o E-mail (Remetente, destinatário, com cópia, com cópia oculta, anexos, mensagem)

    'Informando quem enviará o E-mail
    objCDOSYSMail.From = "wagmor@gmail.com"

    'Detinatários do E-mail
    objCDOSYSMail.To = "F046779@ibest.com.br"
            
    'Destinatários do campo Cc (Com Cópia)
    'objCDOSYSMail.Cc = "" 'Aqui entram os destinatários do campo Com Cópia (Cc)
    
    'Destinatários do campo cópia oculta (Campo Bcc) - Se for o caso
    'objCDOSYSMail.BCC = "" 'Aqui entram os destinatários do campo Com Cópia Oculta (Cco)
    

    'Informando o campo Assunto do E-mail
    objCDOSYSMail.Subject = "ESTE É UM TESTE DE ENVIO DE AUTOMÁTICO DE E-MAIL"

    'Se tiver anexo a enviar junto com o E-mail, informa-se aqui
    'objCDOSYSMail.AddAttachment (anexo) 'Para anexar arquivo

    'Informando qual é a mensagem a ser enviada
    msgf = "Digita-se aqui a mensagem a ser enviada"

    
    'Enviando a mensagem
    objCDOSYSMail.HTMLBody = msgf
    objCDOSYSMail.Send
    
    'Limpando a memória
    Set objCDOSYSMail = Nothing
    Set objCDOSYSCon = Nothing
    
    
End Sub
 
Postado : 05/03/2013 11:37 am
(@sergio-vilar)
Posts: 11
Active Member
Topic starter
 

Wagner,
Por enquanto, muito obrigado pela ajuda.

Alterei as informações de remetente, destinatário e tentei executar, porem deu erro no item objCDOSYSMail.Send, "Falha na conexão do transporte com o servidor".
Vi as referencias do seu vba e coloquei as mesmas e não funcionou.

É necessário configurar algum dos itens a baixo?

   'Configurando os dados do E-mail
    Set objCDOSYSMail = CreateObject("CDO.Message")
    Set objCDOSYSCon = CreateObject("CDO.Configuration")
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "D001COR02"
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
    objCDOSYSCon.Fields.Update
 
Postado : 05/03/2013 12:46 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Sérgio,

Havia esquecido desse detalhe. É necessário configirar sim. É que trabalho em rede e essas configurações me foram passadas pelo pessoal da Tecnologia que trabalha com redes.

Para ser sincero não entendo praticamente nada dessas configurações. O que posso te dizer é que na linha 3, por exemplo, esse "D001COR02" que é atribuído ao smtpserver, trata-se do nome do servidor de correios aqui da minha empresa.

É necessário ainda configurar os otros dados como sendusing, a porta que o servidor utiliza (smtpserverport) o tempo de inatividade da conexão, etc. Você pode pedir ajuda, se for o caso, ao pessoal de apoio da sua empresa, ou aos demais colegas aqui do fórum. Ou ainda pesquisar esse objeto CDO na net.

Agora, também fiquei curioso em saber como efetuar essas configurações para qualquer sistema de envio de e-mail's.

 
Postado : 05/03/2013 12:57 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O uso do CDO para envio de mensagem exige qua a biblioteca "cdosys.dll" esteja presente no equipamento ; pode ser que seja por isso:
Ao executar o codigo proposto pelo colega Morel execute tb o trecho, conforme abaixo para saber se a biblioteca está disponivel:

Sub EMail()
 Dim msgf As String
Dim lngCDORet As Long
lngCDORet = LoadLibrary("cdosys.dll")    'biblioteca do CDO
    If lngCDORet = 0 Then
        MsgBox "CDOSys.DLL não encontrada. Abortando..."
        exit sub
end if
    'Configurando os dados do E-mail
    End If

Segue tambem o codigo similar ao postado pelo colega Morel, com alguns comentários, pode ser que lhe auxilie
Obs.: Baseado no codigo distribuido pelo colega Alexel no forum ExcelBr (YahooGropups)

Option Explicit
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

Sub fnSendCDOMail()
'This code is slightly more complex but not very difficult to understand or work with.
    Dim objMessage As Object
    Dim lngCDORet As Long, daev, pev, tpev, tsev
    pev = ActiveSheet.Range("AA1").Value
    daev = ActiveSheet.Range("AA11").Value
    tpev = ActiveSheet.Range("AA3").Value
    tsev = ActiveSheet.Range("AA2").Value
    Const cdoSendUsingPickup = 1    'Send message using the local SMTP service pickup directory.
    Const cdoSendUsingPort = 2    'Send the message using the network (SMTP over the network).
    Const cdoAnonymous = 0    'Do not authenticate
    Const cdoBasic = 1    'basic (clear-text) authentication
    Const cdoNTLM = 2    'NTLM

    lngCDORet = LoadLibrary("cdosys.dll")    'biblioteca do CDO
    If lngCDORet = 0 Then
        MsgBox "CDOSys.DLL não encontrada. Abortando..."
        GoTo lblExit
    End If

    Set objMessage = CreateObject("CDO.Message")
    objMessage.Subject = tsev '"CDO - Exemplo de envio de mensagem"
    objMessage.From = daev '"""Ed"" <ecotait@hotmail.com>"    'troque
    objMessage.To = pev    'por favor, troque. Se for utilizar mais de um e-Mail, separe-os com ponto-e-vírgula
    'objMessage.cc = "" '"alexcel@...; cooorrea@..."    'por favor, troque
    'objMessage.BCC = "" '"alexcel@..."    'por favor, troque
    objMessage.TextBody = tpev ' "Texto da mensagem..." & vbCrLf & "Foi utilizada a autenticação por SMTP(CDO)." & vbCrLf & Now()
    'Caso queira enviar o escudo do Galo como anexo, posso lhe disponibilizar o arquivo…
    ' objMessage.AddAttachment "c:EscudoDoGalo.jpg"
    '==This section provides the configuration information for the remote SMTP server.
    'Configurações hard-coded para o Yahoo.Com.Br
    objMessage.Configuration.Fields.Item _
            ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    'Name or IP of Remote SMTP Server
    objMessage.Configuration.Fields.Item _
            ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mail.yahoo.com.br"
    'Type of authentication, NONE, Basic (Base64 encoded), NTLM
    objMessage.Configuration.Fields.Item _
            ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
    'Your UserID on the SMTP server

    objMessage.Configuration.Fields.Item _
            ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "reinaldomarco"
    'Your password on the SMTP server
    objMessage.Configuration.Fields.Item _
            ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = InputBox("Senha:")    'altere a forma de passar esta senha, caso deseje envio em massa utilizando Loop.
    'Server port (typically 25)
    objMessage.Configuration.Fields.Item _
            ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    'Use SSL for the connection (False or True)
    objMessage.Configuration.Fields.Item _
            ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
    'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
    objMessage.Configuration.Fields.Item _
            ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
    objMessage.Configuration.Fields.Update
    '==End remote SMTP server configuration section==
    objMessage.Send
lblExit:
    On Error Resume Next
    FreeLibrary lngCDORet
    On Error GoTo 0
    Exit Sub
End Sub
 
Postado : 05/03/2013 1:05 pm