Access X Outlook
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Novos recursos do Outlook e do Access permitiram uma melhoria significativa na automação entre as duas ferramentas. Vamos usar o Access para ganhar acesso aos métodos do Outlook 2007 para realizar o envio de mensagens de forma programática.
Foi montado um arquivo exemplo, que você poderá baixar e verificar na prática o que iremos explicar aqui.
Ao final desta dica você terá visto os seguintes recursos:
1) Como referenciar o Outlook 2007 no Access 2007.
2) Como desabilitar o aviso de segurança do Outlook, quando se envia
email pelo Access.
3) Uso do Richt text para formatação da mensagem no corpo do email.
4) Como adicionar um ou mais anexos.
5) Envio de propaganda em Html, no corpo do email.
6) Envio de relatórios, em diversos formatos, com destaque para o
envio em PDF.
Para ganharmos o acesso aos métodos do Outlook precisamos referenciá-lo no Access. Vamos ver então como fazer isso:
Abra qualquer módulo do Visual Basic, do banco de dados, e selecione FERRAMENTAS > REFERÊNCIAS.
Procure e marque o item MICROSOFT OUTLOOK 12.0 OBJECT LIBRARY, conforme figura abaixo.
Com isso, o Visual basic, terá à disposição todos as classes do Outlook. Usaremos algumas delas no exemplo.
Antes de prosseguirmos com a programação, faremos uma modificação na configuração do Outlook 2007, que nos permitirá enviar mensagens pelo Access, sem que o aviso de segurança do Outlook seja ativado. Veja como é o aviso:
Abra o Outlook e no menu FERRAMENTAS selecione CENTRAL DE CONFIABILIDADE.
Clique em ACESSO DE PROGRAMAÇÃO e selecione uma das opções marcadas abaixo:
Agora com o Access e com o Outlook devidamente configurados, podemos por em prática, nosso projeto.
Veja abaixo o formulário exemplo, feito no Access 2007, para o envio de mensagens e arquivos:
Observe que iremos manipular os principais itens de um email, como se estivéssemos no Outlook.
Carregando, através do uso de variáveis, algumas das classes do Outlook, teremos à nossa disposição, propriedades e métodos, que nos permitirá o envio de mensagens e arquivos.
Veja um trecho do código, que se encontra no evento Ao clicar do botão enviar e preste bastante atenção nos comentários.
Private Sub btEnviar_Click()
'----------------------------------------------
'Criando as variáveis que irão assumir as
'propriedades e métodos das classes do outlook
'---------------------------------------------- Dim objOut As Outlook.Application Dim objMail As Outlook.MailItem '---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'--------------------------------------------- Set objOut = New Outlook.Application
'------------------------------------------------------------
'Abrindo o formulário de email para inserir os itens de email
'Similar ao clicar no botão NOVO do Outlook
'------------------------------------------------------------ Set objMail = objOut.CreateItem(olMailItem)
'-----------------------------------------------------------------------
'Passando os valores do formulário exemplo para os itens de email
'----------------------------------------------------------------------- objMail.To = Me!txPara 'destinatário objMail.CC = Nz(Me!txCc, "") 'com cópia objMail.BCC = Nz(Me!TxCco, "") 'Com cópia oculta ...
'--------------------------------------------
'Usando o método enviar, da classe de itens
'--------------------------------------------
objMail.send
End Sub
Agora que você aprendeu como é fácil enviar um email de forma programática, pelo Access 2007, vamos explicar como manipular alguns desses itens (propriedades) que serão de vital importância na automação de projetos.
O item corpo do email (BODY) pode ser modificado, de modo que possamos redigir texto, com formatação aprimorada. Temos então três possibilidades de configuração : Texto puro, Rich Text ou HTML.
O Formato Rich Text também foi inserido nos campos memorando do Access 2007. Aproveitamos então esta novidade para dar uma qualidade de formatação nas mensagens enviadas.
Observe na figura abaixo o campo mensagem, configurado para a formatação Rich Text.
A formatação do campo memorando por ser modificada através da propriedade TextFormat , 0 (zero) configura o campo memorando sem formatação e 1 configura o campo com a formatação Rich Text
me!txmensagem.TextFormat = 1 'configurado com a formatação Rich text
O item que permite escolher a conta que enviará a mensagem (SendUsingAccount) e a nova classe contas (Accounts), inseridas no Outlook 2007, são novidades bem-vindas. Vamos demonstrar aqui como carregar as contas existentes, criadas no Outlook, numa caixa de combinação.
Observe na figura baixo, a caixa de combinação, com os nomes das contas do Outlook.
Veja o código abaixo de como foi carregada a caixa de combinação
Private Function fncCarregaContas()
Dim objOut As Outlook.Application Dim objConta As Outlook.Account
On Error Resume Next
'------------------------
'Carrega o Outlook
'------------------------ Set objOut = New Outlook.Application '------------------------------- 'Limpa lista caixa de combinação '------------------------------- Me!txContas.RowSource = "" '----------------------------------------------- 'Captura todas as contas criadas no Outlook 'e adiciona na caixa de combinação '----------------------------------------------- For Each objConta In objOut.Session.Accounts If objConta.AccountType = olPop3 Then Me!txContas.AddItem objConta End If Next '---------------------------------------------- 'carrega o primeiro nome da conta como 'valor padrão '---------------------------------------------- Me!txContas.DefaultValue = "'" & Me!txContas.Column(0, 0) & "'" '----------------------------------- 'Limpa os objetos da memória '----------------------------------- Set objConta = Nothing Set objOut = Nothing
End Function
Em função da escolha da conta, pela nossa caixa de combinação, podemos então indicar ao Outlook a conta que enviará a mensagem.
Veja, em vermelho, as linhas acrescentadas no código do botão Enviar:
Private Sub btEnviar_Click()
'----------------------------------------------
'Criando as variáveis que irão assumir as
'propriedades e métodos das classes do outlook
'---------------------------------------------- Dim objOut As Outlook.Application Dim objMail As Outlook.MailItem
Dim objContas As Outlook.Accounts '---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'--------------------------------------------- Set objOut = New Outlook.Application
'------------------------------------------------------------
'Abrindo o formulário de email para inserir os itens de email
'Similar ao clicar no botão NOVO do Outlook
'------------------------------------------------------------ Set objMail = objOut.CreateItem(olMailItem)
'-----------------------------------------------------------------------
'Passando os valores do formulário exemplo para os itens de email
'----------------------------------------------------------------------- objMail.To = Me!txPara 'destinatário objMail.CC = Nz(Me!txCc, "") 'com cópia objMail.BCC = Nz(Me!TxCco, "") 'Com cópia oculta ...
'-----------------------------------------
'Seleciona a conta que enviará a mensagem
'-----------------------------------------
.SendUsingAccount = objOut.Session.Accounts(Me!txContas.Value)
'--------------------------------------------
'Usando o método enviar, da classe de itens
'--------------------------------------------
objMail.send
End Sub
Adicionar anexos a mensagem, sem dúvida é um dos itens mais importantes de se aprender. Para isso iremos utilizar a classe anexos (Attachments), que contém o método Adicionar Anexo (Add). Basta então indicarmos o caminho do arquivo que o método adicionará o arquivo à mensagem.
Primeiro capturamos o arquivo e guardamos o seu caminho completo e o seu nome numa caixa de listagem, conforme exemplo na figura abaixo.
Com a lista dos arquivos anexos salva no campo Anexos, fica bem fácil adicioná-los ao email.
Veja as linhas, em vermelho, adicionadas no código do botão enviar.
Private Sub btEnviar_Click()
'----------------------------------------------
'Criando as variáveis que irão assumir as
'propriedades e métodos das classes do outlook
'---------------------------------------------- Dim objOut As Outlook.Application Dim objMail As Outlook.MailItem
Dim objContas As Outlook.Accounts
Dim objAnexo As Outlook.Attachments '---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'--------------------------------------------- Set objOut = New Outlook.Application
'------------------------------------------------------------
'Abrindo o formulário de email para inserir os itens de email
'Similar ao clicar no botão NOVO do Outlook
'------------------------------------------------------------ Set objMail = objOut.CreateItem(olMailItem)
'-----------------------------------------------------------------------
'Passando os valores do formulário exemplo para os itens de email
'----------------------------------------------------------------------- objMail.To = Me!txPara 'destinatário objMail.CC = Nz(Me!txCc, "") 'com cópia objMail.BCC = Nz(Me!TxCco, "") 'Com cópia oculta ...
'--------------------------------- 'Adicionando os anexos '--------------------------------- For j = 1 To Me!txAnexo.ListCount objAnexo.Add Me!txAnexo.Column(0, j - 1),olByValue,1,Me!txAnexo.Column(1,j-1) Next
.SendUsingAccount = objOut.Session.Accounts(Me!txContas.Value)
'--------------------------------------------
'Usando o método enviar, da classe de itens
'--------------------------------------------
objMail.send
End Sub
Vejamos agora como inserir propagandas ou comunicados, elaborados em HTML. A vantagem do uso de Html são inúmeras , principalmente se o que você deseja apresentar ao seu cliente, estiver em jogo a qualidade visual.
Uma observação - o uso de imagens, geralmente é travado no momento da exibição da mensagem, atrapalhando o objetivo da propaganda ou comunicado. O pessoal então apela para uso de Estilo que também deixa o visual da mensagem bastante chamativo.
Observe na figura abaixo, a opção propaganda selecionada:
O segredinho aqui é usarmos uma função que leia o arquivo html para tê-lo inserido no corpo da mensagem. Veja a função que faz a leitura do arquivo:
Public Function fncLerArquivo(ByVal LocalArquivo As String) As String
Dim objfso As Object Dim objts As Object
On Error Resume Next
Set objfso = CreateObject("Scripting.FileSystemObject") Set objts = objfso.GetFile(LocalArquivo).OpenAsTextStream(1, -2) fncLerArquivo = objts.readall
objts.Close Set objfso = Nothing
End Function
Utilizamos então, a função acima para carregar o arquivo no corpo do email.
...
.BodyFormat = olFormatHTML .HTMLBody = fncLerArquivo(fncLocalBD & "\propagandas\" & Me!Lista.Column(1)) ...
Veja a propaganda na mensagem do Outlook:
Enviar relatórios do Access por email é a automação que mais uso para os meus clientes. O envio de orçamentos, propostas e pedidos de compra encabeçam a lista. O maior desafio é gerar um arquivo do relatório, que seja possível ao cliente fazer a leitura do mesmo, sem a necessidade de se ter Access, além, é claro, de não se perder a formatação original do relatório. O formato PDF é o preferido para isso.
Finalmente, após a atualização do Access 2007, com o pacote SP2, temos à nossa disposição a exportação de relatórios, usando o formato PDF, sem o uso de qualquer suplemento.
Veja no figura abaixo as opções de formato que você pode escolher para o envio de seus relatórios:
O mecanismo usado aqui é o seguinte:
é gerado um arquivo do relatório com a formatação escolhida e é armazenado em uma pasta, usando o comando OutPutTo;
gravamos o caminho e o nome do arquivo gerado na lista de anexos.
...
'-------------------------------------------
'Indicamos o caminho e o nome do arquivo
'a ser gerado
'-------------------------------------------
strCaminho = fncLocalBD & "\enviados\" & Me!Lista & ".pdf"
'------------------------------------------------------
'Gerando o arquivo no formato PDF no caminho indicado
'------------------------------------------------------ DoCmd.OutputTo acOutputReport, Me!Lista.Column(1), acFormatPDF, strCaminho, 0
'---------------------------------------------------
'Grava caminho e nome do arquivo na lista de anexos
'--------------------------------------------------- Me!txAnexo.AddItem strCaminho & ";" & Me!Lista, 0
...
Veja a mensagem lida no Outlook com o anexo do relatório em PDF. Outra novidade no Outlook 2007 é que ele permite visualizar o anexo.
No caso do arquivo, no formato HTML , optamos por enviar o relatório no corpo do email e não como um anexo, utilizando a função fncLerArquivo já descrita .
Observe na figura abaixo o relatório em html, inserido no corpo da mensagem, lida no Outlook:
Espero que o exemplo ajude a você.
Bom estudo!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Adquira o kit UsandoAccess e aprenda em alta velocidade
114 comentário(s) paulo gesse 27/12/2023 08:20:42 posso postar aqui? paulo gesse 27/12/2023 08:19:07 criei um roteiro para enviar email do access. quamdo não temos OUTLOOK instalado na maquina. Juan Pablo 10/03/2023 08:05:39 Olá, Estou analisando os dois tutoriais, https://usandoaccess.com.br/blog/responder-email-conta-especifica-outlook.asp#video e o atual, para encontrar a solução para nossa demanda. Em síntese, recebemos a demanda do cliente via e-mail (caixa postal corporativa - geral), através do e-mail geramos a demanda para ser respondida. O grande desafio: Receber o e-mail com a demanda, abrir o registro no acesse e através do próprio Acces gerar a resposta para o e-mail recebido, ou seja, responder o e-mail através do Access. Imprescindível que a resposta fique gravada na caixa do Outlook, é possível? Eric Hasobe 30/12/2022 12:31:59 Galera preciso utilizar o botão Verificar Nomes do Outlook a partir de código no access. Alguém pode me ajudar? Luciana Souza 10/11/2022 15:21:21 Agradeço muito pelo artigo, me ajudou muito, porém ao enviar o email, é exibida uma mensagem: Erro 2147024809 - Um ou mais argumentos são inválidos... Você pode me informar o motivo e uma solução para este problema Antonio Carlos 24/10/2022 06:31:41 Bom dia Avelino! O link http://www.usandoaccess.com.br/tutoriais/tuto12.asp?id=1#inicio não está funcionando, por favor tem outro caminnho? Obrigado. Sergio 22/08/2022 09:54:34 Boa tarde Avelino! Tem como utilizar a rotina de envio de e-mail usando RunTime 2007?! Dá erro informando que a referência msoutl.olb não existe!! Diego Miranda Lopes 12/08/2022 18:31:20 Olá, existe alguma informação mais avançada sobre Vinculo entre o ACCESS x Contatos do Outlook. O básico, que é fazer o vinculo, já consegui. Porém tem ocorrem varias incompatibilidades que não encontro solução. E gostaria de optar por mais campos à serem vinculados. Alguém sabe algo a respeito? Obrigado Avelino Sampaio 24/06/2022 08:15:26 Bertozo, Salve primeiro os arquivos em uma pasta, para depois então anexa-los. Para salva-los em uma pasta, utilize o comando OutPutTo. Veja no meu turorial "Gerar relatórios em pdf e enviar por email" Bom estudo! Bertozo 22/06/2022 18:53:30 Boa noite Avelino. Primeiramente, parabéns pelo seu tutorial. Estou pesquisando e até o momento não encontrei nada. O que estou querendo fazer é adicionar 2 anexos no mesmo email, através de uma macro enviar objeto. Por exemplo, a macro contém uma consulta no formato .xlsx e um relatorio em .pdf, ao clicar no botão enviar, a macro abre um email com a consulta, e depois abre outro email com o relatorio. É possível colocar a consulta e o relatorio em apenas um email? desde já agradeço!!! Paulo C. Amaral 19/03/2022 19:40:20 Usava esse código baseado nos riquíssimos ensinamentos do Mestre Avelino, que funcionava corretamente, até então. Após usar o Windows 8.1, começou a dar erro no envio na linha ".To", Alguém pode me ajudar? Uso o Access versão 2010. Private Sub PDFEmail_Click() Dim strArquivo As String Dim strLocal As String Dim objOut As Object Dim objmail As Object Dim objAnexo As Object Const olMailItem = 0 Const olByValue = 1 If IsNull(Me!Código) Then Exit Sub Set objOut = CreateObject("Outlook.application") Set objmail = objOut.CreateItem(olMailItem) Set objAnexo = objmail.Attachments strArquivo = "Orçamento" & Me!Código & ".pdf" strLocal = CurrentProject.Path & "\Enviados\" & strArquivo If Me.Dirty Then DoCmd.RunCommand acCmdSaveRecord DoCmd.OpenReport "OrçamentoVincPDF", acViewPreview, , "Código = " & Me!Código, acHidden DoCmd.OutputTo acOutputReport, "OrçamentoVincPDF", acFormatPDF, strLocal DoCmd.Close acReport, "OrçamentoVincPDF" objAnexo.Add strLocal, olByValue, 1 With objmail .To = Me.[E-mail] .Subject = "Orçamento Nº " & Me.Código .Body = "Olá " & Me.Contato & vbCrLf & vbCrLf & _ "Segue em anexo o orçamento solicitado." & vbCrLf & vbCrLf & _ "Atte." & vbCrLf & Me.Vendedor2 & vbCrLf & "EMPRESA1" & vbCrLf & "Av. Jose, 690" & vbCrLf & "Telefone: (11) 2666-0666" & vbCrLf & "Visite nosso site: www.empresa1.com.br" & vbCrLf & Me.Email2 End With objmail.Display Set objAnexo = Nothing Set objmail = Nothing Set objOut = Nothing End Sub Obrigado pela paciência e grandiosidade de nos ajudar Avelino Sampaio 07/03/2022 06:49:36 Eduardo, bem louco este comportamento ! Pelo que eu entendi vc realizou a instalação do 8 sobre o 7. Minha sugestão é que vc use o REPARAR do Office 2007 Vá em Opções do Access > Recursos > Clique no botão Diagnosticar Sucesso! Eduardo Gomes 06/03/2022 11:56:50 Olá, Alguém pode me ajudar Eu tenho uma aplicação que rodava em windows 7 com access 2007 com microsoft outlook No entanto, após instalar o windows 8.1 single a aplicação não funciona mais. a referencia MICROSOFT OUTLOOK 12.0 OBJECT LIBRARY você habilita e depois que o aplicativo reinicia ela não se encontra mais habilitada Ediel Clamoroska 23/02/2022 09:29:24 Avelino bom dia, Como se desativa a segurança do Outlook 2010 para não aparecer o alerta de envio de email? Grato Ediel Clamoroska André Goulart 02/12/2021 09:41:20 Bom Dia Avelino existe a possibilidade de enviar um email da minha conta "Andre" mais o destinatário receber com o nome "Sistema Automático" por exemplo? porque são varias pessoas que enviam o email de varias maquinas para a mesma pessoa. Gustavo 16/11/2021 13:56:09 É sobre a exportação dos emails para o Access ou Excel. tenho uma dúvida cruel. Quando exportamos os emails para uma tabela, só me vem os campos "de" que é o nome da pessoa que enviou o email por extenso, o campo "corpo" que vem parte do corpo do email, e alguns outros campos. Eu gostaria de trazer o campo "email" com o email da pessoa, e não com o nome. É possível? Aguardo resposta. Walter Florêncio 30/10/2021 21:48:48 Caro Avelino. Obrigado pela atenção. Apesar de substituir , conforme sua orientação, o Outllok ainda inicia sobrepondo-se à aplicação. A partir da segunda execução (envio de e-mail), como eu deixo o Outlook minimizado, já não ocorre mais. Alguma outra sugestão? Obrigado. Avelino Sampaio 30/10/2021 08:58:16 Walter, Substitua o call Shell() para este código abaixo: Dim objws As Object Set objws = CreateObject("wscript.shell") objws.Run "outlook.exe", 2, "false" Sucesso! Walter Florêncio 30/10/2021 00:25:40 Boa noite Avelino. Apesar de seguir as suas instruções, não consigo fazer com que o Outlook fique minimizado e sem o foco = Call Shell("Outlook.exe", vbMinimizedNoFocus). Ele insiste em receber o foco e sobrepor a janela do aplicativo. Vc tem alguma sugestão? Walter Florêncio 11/10/2021 14:36:39 Boa tarde Avelino. Parabéns novamente pelo belíssimo trabalho. Minhas dúvidas: 1- Testei as formas de envio de e-mail com a assinatura, porém não visualizo a assinatura nos e-mails recebidos. O que será? 2- As pastas "Assinaturas, enviados e propaganda" devem ser criadas nos .fe ou vc acha que devo criá-las no .be e depois vinculá-las? Qual o mais correto? Parabéns e aguardo retorno. André 04/10/2021 19:57:28 Oi Avelino, Uso o Access 2010 e estou tendo dificuldades de exportar um relatório em formato HTML. Ele contem 3 sub-formulários que são gráficos dinâmicos. O Access informa que não pode exportar sub-formulários. Você tem alguma dica para solucionar isso? Abç Avelino Sampaio 02/10/2021 17:26:58 André, vc deve usar o "nome da conta" , configurado no seu Outlook e não o email da conta que deseja enviar. Supondo que o nome da conta para o seu email "PP-ControleeInformacao@zz.net.br" seja "Controle" .SendUsingAccount = objOut.Session.Accounts(“Controle”) Obs. O Nome da conta é Case Sensiteve (Controle diferente de controle). Sucesso! André Lindolfo 02/10/2021 17:02:38 Oi Avelino, Estou usando o código abaixo. Configurei para enviar por uma conta que não é a padrão no meu outlook, mas o access está enviando pela conta padrão. Onde estou errando? ' Enviar email Set myOlApp = CreateObject("Outlook.Application") Set myItem = myOlApp.CreateItem(olMailItem) Set myAttachments = myItem.Attachments With myItem .SendUsingAccount = "PP-ControleeInformacao@zz.net.br" .To = "fulano@zz.net.br" .Subject = "Arquivo Resumo de operações" .Body = "Oi," & vbCrLf & "Segue o arquivo detalhado do resumo de operações." .Save myAttachments.Add "\\netprd03\suprimentos\Novo_Resumo.xlsb" .Send End With jrm-ajuda sff 01/10/2021 19:12:40 Boa noite Avelino Estive a ver o seu exemplo e acho espectacular, estou tentando adapta-lo para o que eu pretendo, mas estou com alguma dificuldade. Vou explicar o meu problema, eu criei uma consulta que devolve os registos em que pelo menos uma das datas de documentos esta caducada, para cada registo tenho que verificar 4 datas, se uma estiver caducada queria enviar um email ao fornecedor correspondente a esse registo usando par envio o email cadastrado nesse registo e enviando uma mensgem do tipo: "o seu documento Bi esta caducado envio copia de documento valido, mas o meu problema é que este fornecedor pode ter mais que um docummento caducado e ai o texto teria que mudar par incluir todos os documentos caducados, isso pode ser feito tambem com um relatorio ou formulario, com os documentos caducados, solicitado que envie novos documentos. Espero que me possa ajudar.Obrigado. Hugo 27/09/2021 11:33:59 Boa tarde Avelino, Fiz o que me dizes te e fui testar só não consigo enviar pdf diz sempre "2501 access ação outputto foi cancelada" será que me pode ajudar? De resto está a funcionar consigo enviar texto e anexos, só não consigo enviar pdf. Avelino Sampaio 27/09/2021 07:38:29 Hugo, O Access 2007 foi lançado apresentando vários bugs. Sugiro vc atualizar com o pacote SP3 que será a última atualização. Não creio que vá afetar nada do seu projeto mas trará benefícios com a possibilidade de se gerar PDF sem aplicativos de terceiros. Copie e cole o endereço abaixo no seu navegador, para baixar a versão Sp3. http://www.microsoft.com/pt-br/download/details.aspx?id=27838 Sucesso! Hugo 27/09/2021 06:12:15 Bom dia Avelino, Tenho uma duvida se eu instalar o serviço pack 2 vai alterar as minhas base de dados? Alexandre 22/09/2021 12:14:17 Avelino, fiz o processo para tirar o aviso, na hora de enviar email pelo acess, porem no meu outlook, na tela de Seguranca de Acesso de Programacao, as tres opçoes estão travadas/bloqueadas (nao consigo selecionar a opçao). Onde sera que é o problema? Esta com a primeira opçao selecionada, porem continua pedindo a confirmacao no envio do email. No campo "Status da protecao antivirus : Invalido" Avelino Sampaio 21/09/2021 06:23:54 Patrícia, experimente enviar algo para um email inválido. Se o Access gerar uma mensagem de erro, vc então poderá controlar o erro. Algo assim: on error resume next ... objMail.send if err.number > 0 then Aqui vc salva o emial invalido para um tabela ou gera uma mensagem err.clear end if Sucesso! Patricia 20/09/2021 10:06:00 Tem como se controlar se todos emails que eram para ser enviados, realmente foram, ou se algum falhou? Por exemplo, caso algum destinatario da lista de email for invalido, ou nulo, assinalar em uma tabela ou algo do tipo? Grata Daniel 26/08/2021 10:20:17 Muito bom o Post, mas gostaria se existe a possibilidade de arrastar um email diretamente do outlook para um campo tipo Anexo em um formulário, sem a necessidade de salvar e depois procurar o arquivo para anexar. ou se possivel simplesmente com CTRL+C e CTRL+V do Outlook para Access Rogger 06/07/2021 10:33:14 Bom dia Avelino, Tenho um formulário que preciso enviar a imagem dele no corpo da mensagem por outlook. É possível? Se sim, você poderia postar o VBA para eu adaptar? Para enviar a imagem do formulário por e-mail, deve ser um processo automático, não precisando abrir o outlook para enviar a msg. Muito Obrigado, Rogger Placencio Dênis Pimenta 02/07/2021 17:14:50 Avelino, veja se consegue me ajudar: Preciso listar os e-mails do OUTLOOK em um Form do Access e, ao clicar sobre uma linha desta lista, abrir o e-mail. Tem como? Mais uma vez, parabéns pelo belo trabalho. Obrigado. tome vicente 27/06/2021 07:39:12 Muito bom! Fabio 14/06/2021 19:09:32 Olá Avelino, por favor me ajude. Fiz uma macro com ação "enviar objeto" para enviar e-mail a partir de um relatório. Funciona tudo corretamente, abre e-mail com o arquivo em *.pdf já anexado, tudo ok, mas acontece que depois de enviar o e-mail o access trava. Já verifiquei tudo e não consigo encontrar uma solução. Agradeço se tiver alguma idéia do que possa ser. Avelino Sampaio 05/06/2021 08:14:35 Vanderlei, sim é possível. Faça um loop nos regisitros com o recordset e vá concatenando os email's, separando-os com o Ponto e Virgula (;). Sucesso! Vanderlei Alves 04/06/2021 10:12:57 Olá Avelino Adquiri seu MontaRibbon e estou maravilhado com tamanho conhecimento em access Quanto ao outlook x access, gostaria de saber se é possível inserir vários email diretamente do cadastro do cliente para o formulário de envio de mensagens aguardo Gustavo Antonio 24/05/2021 11:34:34 Avelino, muito bom seu exemplo. Eu consegui montar todo o processo mas preciso do inverso também. Preciso, quando receber esses formulários de volta, conseguir importar as informações preenchidas pelas pessoas e jogar numa tabela, para conseguir filtrar. Por exemplo: Conseguir saber, através de uma lista de distribuiçao, quem dessa lista respondeu ou não meu email. Há algum processo referente a isso? Muito obrigado. Aguardo informações. Avelino Sampaio 24/05/2021 09:52:10 Hélio, Neste seu caso, sugiro trabalhar sem referenciar o Outlook, ou seja, use como OBJECT. Veja neste meu outro artigo como é usado o Object. http://www.usandoaccess.com.br/tutoriais/tuto12.asp?id=1#inicio Copie e cole o endereço acima no seu navegador Bom estudo! Hélio 24/05/2021 08:58:13 Avelino, Antes de mais, parabéns pelo excelente artigo que me ajudou bastante na minha BD. No entanto, apesar de o código estar funcionando, dá erro em computadores com versões do outlook diferentes. O problema é que a referência que adicionei no projeto (MS Outlook 14.0) não está presente nesses computadores... Tem como tornar a referência dinâmica por forma a que em cada computador a referência utilizada seja a adequada? Muito obrigado Hélio 24/05/2021 08:57:14 Avelino, Antes de mais, parabéns pelo excelente artigo que me ajudou bastante na minha BD. No entanto, apesar de o código estar funcionando, dá erro em computadores com versões do outlook diferentes. O problema é que a referência que adicionei no projeto (MS Outlook 14.0) não está presente nesses computadores... Tem como tornar a referência dinâmica por forma a que em cada computador a referência utilizada seja a adequada? Muito obrigado Avelino Sampaio 23/05/2021 04:20:54 Reginaldo, não entendi muito bem a sua questão. Bom, vc pode chamar funções públicas pela macro, usando o comando "Executar Código". Basta então indicar o nome da função. =NomeDaFunção() Sucesso! Avelino Sampaio 23/05/2021 04:06:13 Claudio, vc pode adicionar os valores originários de campos. objMail.HTMLBody = Me!txCorpo & "< BR >< BR >" & Me!txAssinatura objMail.Subject = Nz(Me!txAssunto, "Newsletter de Claudio") Sucesso! Reginaldo 23/05/2021 00:10:01 Avelino, Parabéns pelo tutorial. Tenho uma dúvida; Como posso selecionar uma conta de email, se estou usando um botão associado a uma macro incorporada? Muito obrigado. Claudio 21/05/2021 13:01:08 Caros, como consigo colocar o campo subject nesse script para mandar uma mensal padrão e se possivel colocar uma mensagem padrão no corpo do email. Helder Fran 04/05/2021 17:33:43 Excelente! Consegui resolver o meu problema em enviar a partir de contas diferentes da conta padrão que utilizo no Outlook. Muitíssimo obrigado! Thiago César 12/04/2021 11:58:15 Avelino, Primeiramente, Parabéns pelo site! minhá dúvida é: Gostaria de enviar alguns indicadores que estão em pdf no corpo do E-mail, mantendo toda a formatação original do pdf, é possível? André Silveira 27/03/2021 11:06:31 Parabéns pelo post. Tenho um grupo de representantes, e cada representante tem um grupo diferente de clientes. A base é única e atualizada semanalmente. Consigo gerar um relatório agrupando os clientes por representante. Agora preciso que o Access gere o relatório, mas anexe apenas a parte específica do primeiro representante enviando para o e-mail correspondente desse representante. Em seguida, o Access deve fazer o mesmo procedimento para o próximo representante, assim sucessivamente até o final. Alguém saberia me ajudar a automatizar esse procedimento? Avelino Sampaio 19/03/2021 07:01:42 Ediel, estude o código do link abaixo e veja se atende: http://www.access-programmers.co.uk/forums/showthread.php?t=189050&highlight=list+contact+outlook Copie e cole o link no seu nevegador para ter acesso. Sucesso! Ediel Clamoroska 16/03/2021 20:50:37 Avelino, Como posso ajustar o For Each que puxa as contas de email, para puxar e carregar a combobox com os contatos do Outlook? Desde já obrigado! Alegna 14/03/2021 07:09:11 Gostaria de criar um e-mail personalizado onde no meio do texto vou solicitar informações sobre clientes (um cliente por e-mail) e preciso do retorno num banco de dados. O Access permite a coleta dessas informações de forma muito fácil e prático, porém gostaria de fazer o e-mail sem o assistente e com o VBA. Pode ajudar Avelino? Já procurei no Google e não encontrei nada a respeito. Abaixo o link para uso do assistente para melhor entendimento: http://office.microsoft.com/pt-br/access-help/coleta-de-dados-por-meio-de-mensagens-de-email-HA010015427.aspx Obrigado! Avelino Sampaio 13/03/2021 08:15:30 Devid, não consegui entender bem a sua necessidade. Vá pela seção "Contato" aqui do site e me forneça mais detalhes. Veja se o tutorial aqui do site "Gerar relatório em PDF e enviar por email" atende a sua necessidade. Sucesso! Devid Wellton 12/03/2021 12:28:25 Caro Avelino, Estou com uma duvida e se meu relatorio imprime para cada pagina um resultado de um cliente tem como eu criar um pdf para cada pagina com o cod do cliente. uso access 2010 A inlutração acima ficou exelente parabens, perfeito Avelino Sampaio 08/03/2021 04:48:51 Cristiano, Veja a resposta no artigo "Como saber se o Outlook está instalado e aberto" Bom estudo! Cristiano Mendes 07/03/2021 22:33:10 Olá Avelino, Parabéns pela atitude de compartilhar seu conhecimento. O envio do e-mail só está funcionado com o Outlook aberto. Como posso alterar isto ? Desde já obrigado. Daniel Fonseca 05/03/2021 08:20:30 Bom Dia Avelino Estou precisando de uma grande ajuda.... pois não consegui achar em nenhum lugar.... Em meu outlook eu tenho 4 contas de e-mail, sendo uma particular e 3 de serviço... o código a baixo ele faz a leitura dos e-mail que sejam iguais a um determinado titulo e ai ele faz a inclusão em um banco de dados. Private Sub ReadInbox() Dim TempRst As DAO.Recordset Dim Rst As DAO.Recordset Dim OlApp As Outlook.Application Dim Inbox As Outlook.MAPIFolder Dim InboxItems As Outlook.Items Dim Mailobject As Object Dim db As DAO.Database Dim dealer As Integer Set db = CurrentDb Set OlApp = CreateObject("Outlook.Application") Set Inbox = OlApp.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox) Set TempRst = CurrentDb.OpenRecordset("TBL_MAIL") With TempRst .MoveFirst End With Set InboxItems = Inbox.Items For Each Mailobject In InboxItems If Mailobject.UnRead Then With TempRst If Mailobject.Subject = "ASSUNTO 1" Or Mailobject.Subject = "ASSUNTO 2" Then .AddNew !Subject = Mailobject.Subject !from = Mailobject.SenderName !To = Mailobject.To !Body = Mailobject.Body !DateSent = Mailobject.SentOn .Update Mailobject.UnRead = False End If End With End If Next Set OlApp = Nothing Set Inbox = Nothing Set InboxItems = Nothing Set Mailobject = Nothing Set TempRst = Nothing End Sub O problema que ele só verifica a caixa principal que é a particular e não olha as outras. Saberia como resolver esse problema.... Avelino Sampaio 04/03/2021 14:45:40 Adelor, vá na seção tutoriais aqui do site e leia o artigo "64 bits - Seus aplicativos no futuro do presente". Lá tem como proceder para adicionar o atributo Ptrsafe. Bom estudo! Adelor da Silva 04/03/2021 13:53:28 Baixei seu modelo, e agradeço por compartilhar o seu conhecimento. Mas meu windows é 64 bits e da a seguinte mensagem de erro: O código desse projeto deve ser atualizado para uso em sistemas de 64 bits. Analise e atualiza as instruções Declare e, em seguida, marque-as com o atributo PtrSafe Se puder me ajudar ficaria grato! Avelino Sampaio 28/02/2021 08:29:30 Tania, tem um artigo na seção "Tutorias" que ensina como gerar arquivo em PDF e enviar por email. Vc então deve criar o relatório e deste relatório será gerado o PDF para ser enviado. Bom estudo! tania 27/02/2021 11:16:36 Avelino, montei uma formulario com informações de orçamento. Preciso enviar um email para que o solicitante aprove uma das tres opçoes que foram enviadas. É possivel realizar esta função? Obrigada Rodolfo Santos 25/02/2021 00:33:26 Parabéns! Simples e funcional. Ronilson 17/02/2021 17:57:14 Avelino bom dia primeiramente obrigado pelas dicas deixou meu código mais limpo. Estou com o mesmo problema do Alexandre Santos na hora de fazer o loop pelos recorset o mesmo relatório (boleto cef) e enviado, como estou fazendo teste estou utilizando minha conta todo o processo funciona perfeitamente o que acontece é que o mesmo relatório fica alocado na memoria sendo assim durante o loop o primeiro relatório é enviado a todos os email da lista, cheguei esta conclusão pois utilizei os vários métodos de percorrer o recorset como (move.next, acCmdRecordsetNext, ate mesmo acCmdDeleteRecord para eliminar o registro e captura o próximo mas nada funcionou. Tem alguma ideia do que pode estar mantendo este registro na memoria evitando a leitura e envio do próximo. Obrigado; []'s Ronilson Silva wagnergilson@hotmail.com 05/02/2021 11:03:33 Tenho um relatório no access, baseado em uma consulta de várias tabelas, que imprimo e envio cópia a um usuário. Gostaria de mandá-lo via email ao clicar um botão no formulário, sem utilizar o outlook. Não estou conseguindo fazer isso. Leo 04/02/2021 11:52:33 Olá Avelino, Como faço para que a mensagem do e-mail seja o resultado de uma query ou relatório ? Luciana Rodrigues 24/01/2021 10:55:44 Muito bom mesmo seu tutorial, me ajudou muito. Obrigada por compatilhar conosco. Luciana vanderlan 13/01/2021 23:21:39 Como faço para saber se eu tenho uma conta no outlook ? Avelino Sampaio 14/12/2020 06:17:16 Raul, obrigado pelo retorno. Sucesso Raul Nunziato 13/12/2020 07:24:41 Olá novamente. Consegui resolver, segue o codigo: Function enviaform() Dim emails As String, user1 As String, user2 As String, user3 As String, user4 As String, user6 As String, user5 As String On Error GoTo enviaform_Err user1 = [Forms]![lista de e-mails]![userinvent1] user2 = [Forms]![lista de e-mails]![userinvent2] user3 = [Forms]![lista de e-mails]![userplanej1] user4 = [Forms]![lista de e-mails]![usercontrol1] user5 = [Forms]![lista de e-mails]![userplanej2] enviaform_Err: If user5 = "" Then user5 = user3 End If user6 = [Forms]![lista de e-mails]![usersolic] emails = user1 + "; " + user2 + "; " + user3 + "; " + user4 + "; " + user5 + "; " + user6 DoCmd.SendObject acReport, "Solicitação de AD", "PDFFormat(*.pdf)", emails, "", "", "Nova AD Criada", "Uma nova AD foi Criada", True, "" End Function Raul Nunziato 11/12/2020 14:14:00 olá, tenho o codigo: Function enviaform() On Error GoTo enviaform_Err user1 = [Forms]![lista de e-mails]![userinvent1] user2 = [Forms]![lista de e-mails]![userinvent2] user3 = [Forms]![lista de e-mails]![userplanej1] user4 = [Forms]![lista de e-mails]![usercontrol1] user5 = [Forms]![lista de e-mails]![userplanej2] user6 = [Forms]![lista de e-mails]![usersolic] emails = user1 DoCmd.SendObject acReport, "Solicitação de AD", "PDFFormat(*.pdf)", (user1 + ";" + user2 + ";" + user3 + ";" + user4 + ";" + user5 + ";" + user6), "", "", "Nova AD Criada", "Uma nova AD foi Criada", True, "" enviaform_Exit: Exit Function enviaform_Err: MsgBox Error$ Resume enviaform_Exit End Function Minha ideia era pegar os e-mails de um formulário carregado. nas variaveis o VB até reconhece os valores, mas quando abre o outlook o campo "Para" fica em branco. como resolver isso? Carlos Filipe 08/12/2020 08:41:25 Eu achei bastante interessante, e estou com uma dúvida referente à e-mails, se você puder me ajudar, ficarei bastante agradecido. No meu caso eu gostaria de fazer o contrário, ao invés de enviar e-mails pelo Access, eu gostaria de recebê-los. Para isso eu vinculei uma tabela do Access com o Outlook, porém eu só recebo os dados das mensagens, mas não consigo receber os anexos no Access. Abs. Avelino Sampaio 02/12/2020 17:16:30 Demetrius, acesse o tutorial "como estudar com o pesquisador de objetos" e assista ao vídeo. Basta marcar a referência "MICROSOFT OUTLOOK 12.0 OBJECT LIBRARY" e você terá acesso a classe pelo pesquisador de objetos. Bom estudo! Demetrius Sampaio Felinto 30/11/2020 19:12:29 Avelino, gostaria de saber onde encontro as outras opções do objmail. Deixa eu explicar: gostaria de fazer algumas configurações automáticas, tipo: enviar como alta prioridade, confirmar recebimento e leitura, incluir a assinatura. Busquei no pai dos burros virtual (Google) mas não encontrei nada do gênero. Obrigado pela atenção. Namastê! vicente 30/11/2020 13:47:15 Infelizmente passaram tudo aqui na empresa para Google, e no access perdi a função de enviar email que eu utilizava com o outlook. como configuro agora para o access reconhecer o google como sendo o veículo para enviar email? Grato Márcio Melo - Rio de Janeiro/RJ 27/11/2020 23:58:12 Aproveite também imprementei o recurso de e-mail que é super interessante e útil, fiz um from p cadastrar as propagandas e um outro para coletar os e-mail com ; vai dar para fazer uma super mala direta, expetacular... e por hoje é só... Forte abraço Avelino. Avelino Sampaio 10/11/2020 08:56:23 Rafael, veja se o código no link abaixo te ajuda. Se não ajudar , procure no google por "smapi.dll" http://us.generation-nt.com/answer/live-mail-smapi-dll-windows-7-help-198730131.html Sucesso Rafael 09/11/2020 13:23:51 Olá, Eu tenho uma aplicação que rodava em windows XP com outlook express. No entanto, após instalar o windows 7 a aplicação não funciona mais, pois a microsoft descontinuou o outlook express =( Vc sabe como fazer a automação entre o access e o windows live mail. Valeu! jurandy 12/10/2020 00:20:37 muito legal... Parabéns pelo conteúdo. abs. Leonardo Fantin 03/10/2020 17:20:34 Caro amigo, este é um exemplo muito bom! Vc tem algum exemplo para o 97? estou tentando criar um comando que anexe o relatório e gere um emial automático com alguns destinatários, só que o sistema operacional de msg não é o Outlook. Por exemplo, o access tem a opção em personalizar >> barra de ferramentas onde tem um botão para enviar o relatório que está na tela em forma de anexo. É isso que necessito, mas com alguns destinatários já listados no email. Obrigado, Leonardo n13543@cst.com.br Alexandre 23/09/2020 00:40:00 muito bom! Mauricio 15/09/2020 01:00:56 Mas me diga se puder se eu posso enxugar este código Usei muito a mescla da sintaxe do VBA para o Excel Private Sub Sendmail_Click() Dim rs As DAO.Recordset Dim email As String ' acrescentei os temas abaixo Dim Nomeemail As String Dim copiado As String Dim corpo As String Set rs = CurrentDb.OpenRecordset("TBMail") Dim db As Database Dim regt As Recordset Dim Index As String Dim IdCode As Integer ' Step 1 DoCmd.GoToRecord , "", acFirst Do While Not rs.EOF email = rs("Email") Nomeemail = rs("Destino") & "-" & rs("IdUser") corpo = rs("texto") copiado = rs("copia") Set appOutLook = CreateObject("Outlook.Application") Set MailOutLook = appOutLook.CreateItem(olMailItem) With MailOutLook .to = email .cc = copiado .Subject = Nomeemail .body = corpo .Attachments.Add "C:\VBA\texto.txt" .Send End With ' Set 2 - flag indicando que o Status do envio rs.MoveNext Set db = CurrentDb() Set regt = db.OpenRecordset("TbMail", dbOpenTable) regt.Index = "IdCode" regt.Seek "=", IdUser DoCmd.GoToControl "Status" Me.Status.SetFocus Me.Status.Value = "Ok enviado em - " & Cdate(Now()) DoCmd.GoToRecord , "", acNext Loop rs.Close Set rs = Nothing ' ok final MsgBox "Emails enviados" & Chr(13) & Chr(13) & "Total: " & Dcount("IdUser", "TbMail"), vbOKOnly, " Mail Informa" End Sub Avelino Sampaio 14/09/2020 05:55:21 Mauricio, use o código abaixo para realizar um loop pelos registros da tabela. Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("NomeDatabela") Do While Not rs.EOF ' aqui vc tem a disposição os campos do registro ' exemplo: rs!Email, rs!NomeCliente rs.MoveNext Loop rs.Close Set rs = Nothing Sucesso! mauricio 14/09/2020 00:09:23 Avelino, muito bom mesmo Trabalho bastante com vba no excell e consigo atraves do offset realizar repeticoes de envio de um mailing list. To montando um form de envio no access e gostaria de uma rotina. Partindo dos recorde gravados em um tabela e ele fosse ate o último registro. Como posso fazer? Obrigado Avelino Sampaio 27/07/2020 18:01:10 Maurício, Muito obrigado pelo seu apoio. Sucesso Maurício dos Santos 25/07/2020 09:33:41 Avelino, Parabéns!!!!! Parabéns mesmo!!!!! Um dos mais procurados temas de discussão em access explicado de forma simples e direta. Tutorial excelente com uma didática excelente e de uma simplicidade excelente. Mais uma vez, parabéns!!! Maurício dos Santos. Denis 23/07/2020 10:10:32 Avelino, Muito obrigado pelo exemplo ! Tenho uma única questão. Não consegui fazê-lo funcionar com o outlook fechado. Há alguma maneira de reverter isto ? Grato, GILBERTO 15/07/2020 18:55:02 MUITO BOM, ME ATENDEU COMPLETAMENTE João 04/07/2020 05:18:02 Olá. Eu estou a estagiar, e o meu projecto é criar uma base de dados em access, para a frota, que é a parte de automoveis da empresa. Então a base de dados tem que ter muitas informaçoes, por exemplo quando estiver a chegar a inspecção de um automovel, receber um email com essa informação para saber que se tem que levar o carro à inspecçao? Alguém me sabe dizer como posso fazer? Agradeço ajuda, obrigado. Avelino Sampaio 30/06/2020 07:21:23 Alexandre Santos, entre em contato , pela seção "contato" do site, para eu lhe oferecer um esclarecimento pelo seu email. No aguardo Avelino Sampaio 27/06/2020 09:46:51 Cida, procure no help do VBA por LoadFromFile Ou pelo google com a frase "loadfromfile Access 2007" Sucesso! Cida 27/06/2020 09:34:30 Avelino E isso mesmo, eu só queria que gravasse os arquivos anexos no banco de dados, só, porque todos os campos ficam acoplados, mas o anexo não. Alexandre Santos 26/06/2020 01:05:12 Avelino Criei este codigo, porem preciso enviar um relatorio especifico para cada nome. Nao consigo resolver o filtro na consulta para pegar o nome da pessoa, esta mandando o mesmo relatorio para todo mundo quando ou manda o relatorio vazio. Private Sub Comando0_Click() Dim RS As DAO.Recordset Dim Email As String Set RS = CurrentDb.OpenRecordset("TabelaEmail") Do Until RS.EOF Email = RS("Email") NomeEmail = RS("NomeEmail") DoCmd.SendObject acReport, "Meta_Email", "PDFFormat(*.pdf)", Email, "", "", "Meta Boletao : " & NomeEmail, "Meta de Controle de Boletao" & "Sistema Access Tec", False, "" RS.MoveNext Loop Set RS = Nothing End Sub Avelino Sampaio 25/06/2020 03:58:46 Cida, você está querendo gravar os arquivos selecionados num campo tipo anexo? Por favor, entre em contato usando a seção "contato" aqui do site e me passe mais detalhes do que deseja. Cida 24/06/2020 12:52:11 Avelino Usando seu bd email_Outook, mas gostaria de usar gravando dados no bd, mas no campo anexo, quando eu coloco ele acoplado ao campo da tabela ele não grava os nomes dos arquivos que selecionei, como faço para acloplar ele. Avelino Sampaio 18/06/2020 08:02:00 Marcio, acredito que só conseguirá mediante uma programação de extração do arquivo. Veja no meu tutorial sobre ribbons "Imagens de campo tipo anexo". Lá eu uso o método SaveToFile para a extração do arquivo e o coloco numa pasta temporária. Passo então a manipular o arquivo da pasta temporária. Sucesso! Marcio Gomes 17/06/2020 16:20:13 Tem um modelo do Access 2007 chamado tarefas, vc pode até baixar ele aí no seu pç, lá tem tudo que eu quero só que no campo anexo os arquivos que seleciono não querem ir para o outlook, como faço, pode me ajudar? Marcio 17/06/2020 15:46:23 Avelino Estou usando seu bd email_Outook, mas gostaria de usar gravando dados no bd, mas no campo anexo, quando eu coloco ele acoplado a tabela/anexo ele não grava os nomes dos arquivos que selecionei, como faço. Avelino Sampaio 15/06/2020 18:59:07 Jefferson, acrescente a seguinte linha: Set objAnexo = ObjMail.Attachments logo abaixo da linha: Set ObjMail = objOut.CreateItem(olMailItem) Sucesso! JEFFERSON ALMEIDA 15/06/2020 17:25:23 Avelino, Você pode me ajudar? O que está errado no código abaixo? Estou conseguindo enviar o e-mail, mas quando acrescento a linha para anexar está dando erro. Private Sub btEnviar_Click() Dim objOut As Outlook.Application Dim ObjMail As Outlook.MailItem Dim objAnexo As Outlook.Attachments Set objOut = New Outlook.Application Set ObjMail = objOut.CreateItem(olMailItem) ObjMail.To = "jefferson.x.almeida@gmail.com" objAnexo.Add "C:\Teste\Teste.txt", olByValue, 1, "TESTE" ObjMail.Send End Sub DESDE JÁ AGRADEÇO! Avelino Sampaio 10/06/2020 04:32:43 Fabio, configure o seu outlook para deixar uma cópia das mensagens no servidor durante uns 3 dias. Assim dá tempo suficiente para receber todas as mensagens no seu blakberry. menu ferramentas > configurações de conta > marque uma conta e clique em alterar > clique no botão "mais configurações" > selecione a guia avançado > Marque "Deixar uma cópia das mensagens no servidor" Sucesso fabio ferraz 09/06/2020 17:58:34 gostaria de receber no meu pc e blakberry o mesmo email quando recebo um email no outllok nao recebo ele no celular e vice e versa ok gostariade uma resposta paraisso o que falta configurar para receber nos 2 lugares ok Avelino Sampaio 08/06/2020 17:47:49 Ivair, Fica um pouco complicado pra mim como foi configurado o outlook para uso interno. Uma tentativa é a troca da linha abaixo. If objConta.AccountType = olPop3 Then por essa: If objConta.AccountType = ollmap Then Sucesso! Ivair Bezerra 08/06/2020 15:07:50 Avelino, tentei enviar as mensagem do form frmEmail do seu bd email_Outlook usando uma caixa de correio generica que so manda para os e-mails internos aqui na empresa. A mensagem de erro no access é -2147024809 Nao foi possivel concluir a operacao. Um ou mais valores do parametro nao sao validos. o nome da conta é 990311774@corp1.rc.itau / ATENDIMENTOAGIREMPRESAS@correio.itau.com.br. quando faço pela opção do Access "Coletar Dados" --> "Criar Email", eu consigo enviar sem problemas. ezequias santos de souza 11/05/2020 09:08:35 quero anexar com meu email cartas para enviar aos meus contatos mais nao estou conseguindo por favor me explique como fazer isto Avelino Sampaio 11/04/2020 06:17:50 Francisco, Já li em algum fórum esta possibilidade mas eu não tenho como te ajudar nessa, pois me falta tempo para pesquisar. Vc mesmo pode tentar descobrir os recursos do outlook, usando o pequisador de objetos do VBA. Tenho um tutorial ensinado como usá-lo. Sucesso Francisco Degrazia 08/04/2020 14:24:49 Avelino, Parabéns pelo tutorial, está excelente! A propósito, existe alguma forma de que a caixa vinculada do Outlook no ACCESS também tenha as formatações HTML, anexos, etc? Ou seja, usar as tuas orientações para leitura e visualização de anexos também, além da possibilidade de enviar. Abraço, Avelino Sampaio 28/03/2020 08:26:29 Adriano, Teria que envestigar na classe do outlook se tem esta opção. Eu não sei te dizer Uma alternativa é inserir direto no corpo do email. Algo assim: ... .HTMLBody = [corpo do email] [comando de pular linha] [sua assinatura] ... Sucesso Adriano Santana 25/03/2020 15:59:17 O Tutorial está perfeito, Apenas me ocorreu uma duvida. Como colocar no corpo do email a assinatura cadastrada no outlook? Avelino Sampaio 17/03/2020 09:17:06 Marcelo, baixei aqui o exemplo em duas máquinas diferentes e está tudo normal(com os códigos). Tente baixar novamente. Para obter a opção do PDF é necessário instalar o pacote de atualizações Sp2 do Access 2007. Sucesso Marcelo 16/03/2020 18:50:21 Achei muito bom, mas baixei o sistema e não veio os códigos, nem mesmo dos módulos, não sei se foi uma versão antiga, pois não tem a opção PDF, se possivel gostaria que pudesse me mandar um link marcelo.evento@terra.com.br Grato Fabio 07/02/2020 05:13:42 Bom dia, Avelino, peguei este código: Private Sub btnTeste_Click() Dim myItem As Object Dim myRequiredAttendee, myOptionalAttendee, myResourceAttendee As Outlook.Recipient Set myItem = Application.CreateItem(olAppointmentItem) myItem.MeetingStatus = olMeeting myItem.Subject = "Strategy Meeting" myItem.Location = "Conf Rm All Stars" myItem.Start = #2/7/2019 1:30:00 PM# myItem.Duration = 90 Set myRequiredAttendee = myItem.Recipients.Add("Nate Sun") myRequiredAttendee.Type = olRequired Set myOptionalAttendee = myItem.Recipients.Add("Kevin Kennedy") myOptionalAttendee.Type = olOptional Set myResourceAttendee = myItem.Recipients.Add("Conf Rm All Stars") myResourceAttendee.Type = olResource myItem.Display myItem.Send End Sub Ativei a referência "Microsoft Outlook 16.0 Object Library", porém, ao executar o código, ocorre o erro: "Método ou membro de dados não encontrado" Print: https://prnt.sc/mhw8g4 O que pode estar ocorrendo? =\ Avelino Sampaio 12/01/2020 18:48:31 Estevam, você atualizou o seu Office com o pacote SP2 ? Estevam 12/01/2020 17:47:04 Olá Avelino Grato pelo seu interesse em ajudar. Veja só: Sobre: "Qual objeto está enviando ? relatório ?" - Isso é um relatório Sobre:"Use o argumento "Editar mensagem" para sim" - está assim mesmo. Sobre:"Sua conta no Outlook é de que provedor ? Hotmail ?" - O provedor é o OUL Sobre: "No Outlook, vá em: ferramentas > central de confiabilidade..." - já analisei tudinho e não encontro nada que possa está impedindo. O mais interessante aconteceu hoje: Abri uma nova conta no OutLook e NÃO defini com coanta padrão. Veja que ele abriu para enviar com a conta anterior do OUL. Rodei a macro - deu certo - abriu a tela do OutLook normalmente. Porém........ foi uma única vez. Depois não vai mais. Nem definindo esta conta como padrão. É um mistério Avelino - um mistério. Acho que é alguma configuração da minha máquina, do meu OutLook ou de eu e-mail no uol. Vamos continuar tentado. Grato Estevam Avelino Sampaio 12/01/2020 08:04:08 Olá Estevam 1) Qual objeto está enviando ? relatório ? É pra eu simular um teste parecido com o seu 2) Mantenha o Outlook aberto e minimizado 3) Use o argumento "Editar mensagem" para sim - isso é pra ver se ele vai abrir a formulário de envio do Outlook 4) No Outlook, vá em: ferramentas > central de confiabilidade e verifique se não há nada configurado que possa esta interferindo no envio 5) Agora um chute - seu antivírus pode estar interferindo 6) Sua conta no Outlook é de que provedor ? Hotmail ? Fiz testes aqui com este comando e funcionou. Aguardo mais informações. Utilize o link "contato" e me passe o seu email Sucesso Avelino sampaio Estevam 11/01/2020 13:28:37 Muito interessante. Obrigado pela dica. Dentro deste assunto tenho uma dificuldade. Fiz uma macro "enviar Objeto". Uso o Outlook 2007 Preenchi tudo direitinho. Ao rodar a macro vem uma mensagem: O Microsoft Office Access não pode enviar este email. Configure o computador parqa enviar e receber email. Acontece que está configurado. Uso o Outlook ormalmente. Não sei como resolver |