ENVIAR EMAIL COM AUTENTICACAO SSL COM O VBSENDMAIL
Citação::
Blz, agradeço a ajuda PHOENIX209E, fico no aguardo da sua dll
pega ae...
http://www.vbmania.com.br/pages/download.php?varKey=0f0bc93e34e1bac0c3c347d6822f0987&varTipo=1
PHOENIX209E agradeço pela dll, só que esta acontecendo algo de errado
Primeiro coloquei os dois arquivos na sistem32, blz
Depois tentei registrar, por ser uma Dll, ele não conseguiu registrar - Falha em loadLibrary([Ô]envia_email.dll[Ô]) - Não foi possÃvel encontrar o módulo especificado
Depois entrei no vb, e tentei fazer referencia a dll e também não deu - Can[ô]t add a reference to the specified file
Consegui fazer referencia a envia_email.tlb, só que ele não abre nenhuma das opções para colocar os parametros, mesmo criando a variável do jeito q vc me falou, ele não abre nehum opção.
Ao criar a variável ele me abre duas opções para fazer referencia, e selecionei as duas más infelizmente não teve nenhum resultado.
O arquivo continha uma Dll Envia_email.dll Versão 1.0.0.0 e um Tlb Envia_email.tlb ambos com a data de modificação 05/10/2011 é isso mesmo?
O q será q seu errado?
Primeiro coloquei os dois arquivos na sistem32, blz
Depois tentei registrar, por ser uma Dll, ele não conseguiu registrar - Falha em loadLibrary([Ô]envia_email.dll[Ô]) - Não foi possÃvel encontrar o módulo especificado
Depois entrei no vb, e tentei fazer referencia a dll e também não deu - Can[ô]t add a reference to the specified file
Consegui fazer referencia a envia_email.tlb, só que ele não abre nenhuma das opções para colocar os parametros, mesmo criando a variável do jeito q vc me falou, ele não abre nehum opção.
Ao criar a variável ele me abre duas opções para fazer referencia, e selecionei as duas más infelizmente não teve nenhum resultado.
O arquivo continha uma Dll Envia_email.dll Versão 1.0.0.0 e um Tlb Envia_email.tlb ambos com a data de modificação 05/10/2011 é isso mesmo?
O q será q seu errado?
Bom, até há poucos meses atrás, eu estava com um site público com um gerador de códigos-fonte, e usando minha conta GMail pessoal para remeter o pacote gerado. Agora é um site de intranet na empresa, e já não gera mais os códigos-fonte, mas sim as DLLs já compiladas.
Então, graças á isso, posso dar uma idéia de como fiz, e quais os pontos que deram algum trabalho (quase nada, aliás). Talvês isso possa ajudar.
Comfigurações para instância do Cliente SMTPServer usando contas GMail:
Portas:
465 / 587
Host:
smtp.gmail.com
Conta: suaconta!@gmail.com
Senha: suasenha
From: suaconta@gmail.com
Obs.: Utilize um NetCredentials para as credenciais de acesso.
Para anexar arquivos compactados (Zip / Rar), observe para que a nomenclatura dos arquivos contidos no arquivo compactado seja válida (não contenha simbolos, por exemplo), e sempre substitua a extensão dos arquivos. O GMail tem mecanismos que podem bloquear anexos compactados e scripts.
Se enviar o corpo da mensagem em formato HTML, ao invés de texto, monte a mensagem como uma página completa (incluindo as tags <html>,<body> etc), sempre sem scripts e sem fotos, imagens ou papéis de fundo.
O exemplo então (rotina-trecho de uma classe ASP.Net, site com MembershipProvider ativo):
Obs: Tem uma outra rotina que eu fiz, parecida com essa acima (só não lembro onde está), que recebe uma lista de anexos, uma lista de endereços [Ô]Para[Ô] e um XML tipo template para o corpo da mensagem. Essa última era mais genérica, seria mais indicado, mas não é tão complexo de implementar isso no exemplo acima.
Então, graças á isso, posso dar uma idéia de como fiz, e quais os pontos que deram algum trabalho (quase nada, aliás). Talvês isso possa ajudar.
Comfigurações para instância do Cliente SMTPServer usando contas GMail:
Portas:
465 / 587
Host:
smtp.gmail.com
Conta: suaconta!@gmail.com
Senha: suasenha
From: suaconta@gmail.com
Obs.: Utilize um NetCredentials para as credenciais de acesso.
Para anexar arquivos compactados (Zip / Rar), observe para que a nomenclatura dos arquivos contidos no arquivo compactado seja válida (não contenha simbolos, por exemplo), e sempre substitua a extensão dos arquivos. O GMail tem mecanismos que podem bloquear anexos compactados e scripts.
Se enviar o corpo da mensagem em formato HTML, ao invés de texto, monte a mensagem como uma página completa (incluindo as tags <html>,<body> etc), sempre sem scripts e sem fotos, imagens ou papéis de fundo.
O exemplo então (rotina-trecho de uma classe ASP.Net, site com MembershipProvider ativo):
...
Private Function EnviaEmail(anexos As String) As Boolean
Dim ret As Boolean = False
[ô]Se o anexo foi gerado, enviar.
If IO.File.Exists(attach) Then
[ô]Conta de acesso ao site, indica para quem enviar o anexo.
Dim u As MembershipUser = Membership.GetUser(My.User.Name)
If u IsNot Nothing Then
[ô]Corpo da mensagem.
Dim msg As New StringBuilder
msg.AppendLine([Ô]<page>[Ô])
msg.AppendLine([Ô]<body style=[ô]background-color:#ffffff;color:#000000;[ô]>[Ô])
msg.AppendLine([Ô]<br />[Ô])
msg.AppendLine(String.Format([Ô]<h3>{0}:</h3>[Ô], u.UserName))
msg.AppendLine([Ô]<br />[Ô])
msg.AppendLine([Ô]<br />[Ô])
msg.AppendLine([Ô]<p>Os códigos-fonte solicitados foram gerados e seguem no arquivo em anexo.</p>[Ô])
msg.AppendLine([Ô]<br />[Ô])
msg.AppendLine([Ô]<p>Para utilizá-los, siga os seguintes passos:</p>[Ô])
msg.AppendLine([Ô]<ul>[Ô])
msg.AppendLine([Ô]<li>Salve o arquivo em anexo em seu disco local.</li>[Ô])
msg.AppendLine([Ô]<li>Renomeie-o, alterando sua extensão de [Ô][Ô]zap[Ô][Ô] para [Ô][Ô]zap[Ô][Ô].[Ô])
msg.AppendLine([Ô]<li>Descompacte-o por meio de qualquer compressor que reconheça o padrão Gzip®. O Microsoft® Windows desde a versão XP o reconhece nativamente.[Ô])
msg.AppendLine([Ô]<li>Na pasta onde a decompressão foi efetuada, para cada tabela, um novo arquivo [Ô][Ô]zap[Ô][Ô] terá sido criado. Repita as operações acima.[Ô])
msg.AppendLine([Ô]<li>Para cada tabela que você tenha marcado, haverá um arquivo [Ô][Ô]txt[Ô][Ô] corresponde á um módulo de classe em Microsoft® Visual Basic, compondo a BLL de seu projeto. Deste modo, basta agora renomear estes arquivos (extensão [Ô][Ô].vb[Ô][Ô]) e anexá-los ao seu projeto.[Ô])
msg.AppendLine([Ô]</ul>[Ô])
msg.AppendLine([Ô]<p>Todas as classes geradas dependem da inclusão da classe [Ô][Ô]DAL[Ô][Ô] (presente no anexo), que representa a camada primária de acesso aos dados. Não esqueça de anexar este arquivo.</p>[Ô])
msg.AppendLine([Ô]<p>E lembre-se de anexar as referências necessárias ao seu projeto antes de usar as classes.</p>[Ô])
msg.AppendLine([Ô]<p>Nós, da IO Systems®, agradecemos por sua preferência.</p>[Ô])
msg.AppendLine([Ô]<p>Caso tenha alguma sugestão ou crÃtica, por favor, envie-nos seus comentários para <a href=[ô]mailto:iosystems@hotmail.com[ô]>IO Systems®</a>.</p>[Ô])
msg.AppendLine([Ô]<br />[Ô])
msg.AppendLine([Ô]</body>[Ô])
msg.AppendLine([Ô]</page>[Ô])
[ô]Mensagem de e-mail.
Try
Dim [from] As String = [Ô]suacontagmail@gmail.com[Ô]
Dim [to] As String = u.Email
Dim mail As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage()
With mail
mail.To.Add([to])
mail.From = New System.Net.Mail.MailAddress([from], [Ô]IO Systems® (Ghost One)[Ô], System.Text.Encoding.UTF8)
mail.Subject = [Ô]Serviço de geração de fontes on-line.[Ô]
mail.SubjectEncoding = System.Text.Encoding.UTF8
mail.Body = msg.ToString
mail.BodyEncoding = System.Text.Encoding.UTF8
mail.IsBodyHtml = True
mail.Headers.Add([Ô]X-Company[Ô], [Ô]IO Systems®[Ô])
mail.Attachments.Add(New System.Net.Mail.Attachment(attach))
mail.Priority = Net.Mail.MailPriority.High
End With
[ô]Cliente do serviço de SMTP:
Dim client As Net.Mail.SmtpClient = New Net.Mail.SmtpClient()
With client
.Credentials = New System.Net.NetworkCredential(from, [Ô]sua senha do gmail[Ô])
.Port = 587
.Host = [Ô]smtp.gmail.com[Ô]
.EnableSsl = True
Try
.Send(mail)
ret = True
If ret Then
If IO.File.Exists(attach) Then
mail.Dispose()
mail = Nothing
[ô]Não apagar o arquivo: O gerador se encarrega disso.
End If
End If
Catch ex As Exception
[ô]Recuperar os detalhes de erros, se ocorrerem:
Dim ex2 As Exception = ex
Dim errorMessage As String = String.Empty
While (ex2 IsNot Nothing)
errorMessage += ex2.ToString()
ex2 = ex2.InnerException
End While
HttpContext.Current.Response.Write(errorMessage)
End Try
End With
Catch ex As Exception
ret = False
End Try
End If
End If
Return ret
End Function
...
Obs: Tem uma outra rotina que eu fiz, parecida com essa acima (só não lembro onde está), que recebe uma lista de anexos, uma lista de endereços [Ô]Para[Ô] e um XML tipo template para o corpo da mensagem. Essa última era mais genérica, seria mais indicado, mas não é tão complexo de implementar isso no exemplo acima.
Professor obrigado pelo retorno, esses códigos eles estão no asp.net, más eu estou com o vb6, fui atrás do NetCredentials, seguindo a sua orientação más estava vendo que é tudo para asp.net, tem como implementar essa rotina no vb6?
Tirando a parte da mensagem no corpo do email, no mais as configurações sõa as mesmas e quanto ao anexo, não preciso renomear pois estou gerando o arquivo em PDF
Tirando a parte da mensagem no corpo do email, no mais as configurações sõa as mesmas e quanto ao anexo, não preciso renomear pois estou gerando o arquivo em PDF
Você está certo, e eu totalmente errado. Postei código VB.Net em um tópico VBA.
Peço desculpas pela gafe, deve ser o sono.
Usando então a CDO/CDONT (Particularmente, não gosto de componentes de terceiros: Sem generalizar, mas ou é da MS ou é pêrda de tempo):
Peço desculpas pela gafe, deve ser o sono.
Usando então a CDO/CDONT (Particularmente, não gosto de componentes de terceiros: Sem generalizar, mas ou é da MS ou é pêrda de tempo):
...
[ô]------
[ô] Criar a instância.
Set objEmail = CreateObject([Ô]CDO.Message[Ô])
[ô]------
[ô] Compôr a mensagem.
objEmail.From = [Ô]SuaConta@GMail.com[Ô]
objEmail.To = [Ô]recipiente@email.com[Ô]
objEmail.Subject = [Ô]assunto[Ô]
objEmail.HTMLbody = [Ô]mensagem[Ô]
[ô]------
[ô] Aqui entram as configurações, dentre as quais, a credencial.
objEmail.Configuration.Fields.Item([Ô]http://schemas.microsoft.com/cdo/configuration/sendusing[Ô]) = 2
objEmail.Configuration.Fields.Item([Ô]http://schemas.microsoft.com/cdo/configuration/smtpserver[Ô]) = [Ô]smtp.gmail.com[Ô]
objEmail.Configuration.Fields.Item([Ô]http://schemas.microsoft.com/cdo/configuration/smtpauthenticate[Ô]) = 1
objEmail.Configuration.Fields.Item([Ô]http://schemas.microsoft.com/cdo/configuration/sendusername[Ô]) = [Ô]SuaConta@GMail.com[Ô]
objEmail.Configuration.Fields.Item([Ô]http://schemas.microsoft.com/cdo/configuration/sendpassword[Ô]) = [Ô]SuaSenhaGMail[Ô]
objEmail.Configuration.Fields.Item([Ô]http://schemas.microsoft.com/cdo/configuration/smtpserverport[Ô]) = 465
objEmail.Configuration.Fields.Item([Ô]http://schemas.microsoft.com/cdo/configuration/smtpusessl[Ô]) = True
objEmail.Configuration.Fields.Update
[ô]------
[ô] Agora, enviar.
objEmail.Send
...
[ô]------
[ô] Tratamento de erros.
...
[ô]------
[ô] [Ô]Matar[Ô] a instância.
set objEmail = Nothing
...
Professor obrigado pela ajuda, más eu estava usando o cdont, só que ele estava dando erro em alguns emals, foi quando o técnico do meu cliente criou uma conta do gmail e ai que ferrou td, qqer email que eu estava tentando mandar o servidor simplesmente desconectava.
A forma que eu estava usando era essa:
Dim Msg As CDO.Message
Dim Cof As CDO.Configuration
Dim Camp
Set Msg = New CDO.Message
Set Cof = New CDO.Configuration
Set Camp = Cof.Fields
With Camp
.Item(cdoSendUsingMethod) = 2
.Item(cdoSMTPServer) = RsParametros!servidorsmtp
.Item(cdoSMTPConnectionTimeout) = 300 [ô] Tempo
.Item(cdoSMTPAuthenticate) = RsParametros!Autenticacao
.Item(cdoSendUserName) = RsParametros!usuarioautenticacao
.Item(cdoSendPassword) = RsParametros!Senha
.Update
End With
With Msg
Set .Configuration = Cof
.To = TxtPedidoPara.Text
.From = RsParametros!email
.Subject = [Ô]Pedido de Compra[Ô]
.HTMLBody = TxtObs.Text
.CC = CopiaEmail [ô]Informe o ou os destinatários da cópia
.BCC = RsParametros!email [ô]Informe o ou os destinatários da cópia oculta
.AddAttachment App.Path & [Ô]\pedido.pdf[Ô]
.Send
End With
Tem alguma coisa de errado?
Só uma pergunta professor, eu usei a configuração do smtp meu cliente na minha máquina, e mandou td certinho.
Porque na máquina do meu cliente não vai?
Sei q é uma pergunta chata de responder, más teria alguma lógica nisso?
A forma que eu estava usando era essa:
Dim Msg As CDO.Message
Dim Cof As CDO.Configuration
Dim Camp
Set Msg = New CDO.Message
Set Cof = New CDO.Configuration
Set Camp = Cof.Fields
With Camp
.Item(cdoSendUsingMethod) = 2
.Item(cdoSMTPServer) = RsParametros!servidorsmtp
.Item(cdoSMTPConnectionTimeout) = 300 [ô] Tempo
.Item(cdoSMTPAuthenticate) = RsParametros!Autenticacao
.Item(cdoSendUserName) = RsParametros!usuarioautenticacao
.Item(cdoSendPassword) = RsParametros!Senha
.Update
End With
With Msg
Set .Configuration = Cof
.To = TxtPedidoPara.Text
.From = RsParametros!email
.Subject = [Ô]Pedido de Compra[Ô]
.HTMLBody = TxtObs.Text
.CC = CopiaEmail [ô]Informe o ou os destinatários da cópia
.BCC = RsParametros!email [ô]Informe o ou os destinatários da cópia oculta
.AddAttachment App.Path & [Ô]\pedido.pdf[Ô]
.Send
End With
Tem alguma coisa de errado?
Só uma pergunta professor, eu usei a configuração do smtp meu cliente na minha máquina, e mandou td certinho.
Porque na máquina do meu cliente não vai?
Sei q é uma pergunta chata de responder, más teria alguma lógica nisso?
Hehehe! Ok, sem problemas!
é, de fato, se as mesmas configurações (e parâmetros) funcionam em uma estação e não funcionam em outra, essa é uma pergunta [Ô]cabeluda[Ô], mas quem lida com [Ô]lógica[Ô] de programação sabe que esse têrmo é pura ilusão de ótica...
Brincadeiras á parte, vamos tentar entender: Você verificou que a porta é mesmo a 465 e que o endereço do servidor é mesmo [Ô]smtp.gmail.com[Ô]. Em sua máquina, então, funcionou com as credenciais, mas no cliente, não autenticou. Existe a possibilidade de o firewall de rede OU as regras de A.D. do seu cliente estarem bloqueando a conexão. Afinal, [Ô]seuendereço@gmail.com[Ô] não é parte do A.D. local.
Ainda assim, não é certeza. Estou deduzindo isso assim: Antes funciovava, mas ocorriam erros em alguns e-mails (isso se dá por regras de filtragem, por endereço de destino inválido, remetente não-localizado no A.D. ou ainda por demanda de serviço acima da capacidade de processamento ou da caixa de saÃda). Em seguida, um técnico criou uma conta GMail, provavelmente para utilizar o SMTP do Google em lugar do SMTP do seu cliente. E á partir desse momento, cessou a conectividade, ou seja, uma entre duas possibilidades: Ou as credenciais da conta do GMail são incorretas, ou é um bloqueio efetuado pela rede interna. E como de sua máquina o processo transcorre normalmente, o que resta, por mais improvável, deve ser a resposta.
é, de fato, se as mesmas configurações (e parâmetros) funcionam em uma estação e não funcionam em outra, essa é uma pergunta [Ô]cabeluda[Ô], mas quem lida com [Ô]lógica[Ô] de programação sabe que esse têrmo é pura ilusão de ótica...
Brincadeiras á parte, vamos tentar entender: Você verificou que a porta é mesmo a 465 e que o endereço do servidor é mesmo [Ô]smtp.gmail.com[Ô]. Em sua máquina, então, funcionou com as credenciais, mas no cliente, não autenticou. Existe a possibilidade de o firewall de rede OU as regras de A.D. do seu cliente estarem bloqueando a conexão. Afinal, [Ô]seuendereço@gmail.com[Ô] não é parte do A.D. local.
Ainda assim, não é certeza. Estou deduzindo isso assim: Antes funciovava, mas ocorriam erros em alguns e-mails (isso se dá por regras de filtragem, por endereço de destino inválido, remetente não-localizado no A.D. ou ainda por demanda de serviço acima da capacidade de processamento ou da caixa de saÃda). Em seguida, um técnico criou uma conta GMail, provavelmente para utilizar o SMTP do Google em lugar do SMTP do seu cliente. E á partir desse momento, cessou a conectividade, ou seja, uma entre duas possibilidades: Ou as credenciais da conta do GMail são incorretas, ou é um bloqueio efetuado pela rede interna. E como de sua máquina o processo transcorre normalmente, o que resta, por mais improvável, deve ser a resposta.
Qto a porta 465, realmente eu verifiquei, estava dando erro na minha máquina também ai pedi ajuda aki, e oPHOENIX209E falou para eu usar a porta 587, ficou show na minha máquina.
Acredito que possa ser a conexão segura que ele o gmail pede, e qto ao q vc falou - provavelmente para utilizar o SMTP do Google em lugar do SMTP do seu cliente - esta correto, pois ele usava um smtp do uol, e por falta de pagamento mais por ele não receber o boleto na mão, a conta foi bloqueada e com isso não passava mais nenhum email.
Então usando o smtp do google que é gratuito, não tem esse problema e nessa qm se lascou fui eu .
Quanto a demanda, ela é muito pouca, pois no sistema que enviado um único email com o pedido em anexo para o fornecedor, agora no que eu estou tentando mexer, estarei enviando vários emails por lote, más isso é outro cliente que não tem a conta do gmail, ainda bem rsrsrs.
Más professor agradeço pela ajuda até essa hora, se vc tiver mais alguma idéia do que possa ser agradeço se puder passar para mim, no mais agradeço pela postagem dos códigos e a disposição, pena que não resolvi, más fico contente porque sei como vc é fera e suas soluções eram as que eu ja tinha tentado, então isso qr dizer q estou no caminho certo, rsrsrs, não estou inventando.
Acredito que possa ser a conexão segura que ele o gmail pede, e qto ao q vc falou - provavelmente para utilizar o SMTP do Google em lugar do SMTP do seu cliente - esta correto, pois ele usava um smtp do uol, e por falta de pagamento mais por ele não receber o boleto na mão, a conta foi bloqueada e com isso não passava mais nenhum email.
Então usando o smtp do google que é gratuito, não tem esse problema e nessa qm se lascou fui eu .
Quanto a demanda, ela é muito pouca, pois no sistema que enviado um único email com o pedido em anexo para o fornecedor, agora no que eu estou tentando mexer, estarei enviando vários emails por lote, más isso é outro cliente que não tem a conta do gmail, ainda bem rsrsrs.
Más professor agradeço pela ajuda até essa hora, se vc tiver mais alguma idéia do que possa ser agradeço se puder passar para mim, no mais agradeço pela postagem dos códigos e a disposição, pena que não resolvi, más fico contente porque sei como vc é fera e suas soluções eram as que eu ja tinha tentado, então isso qr dizer q estou no caminho certo, rsrsrs, não estou inventando.
Até tem uma, mas como eu já havia postado, creio que você já testou.
Seria substitnuir:
Por
Seria substitnuir:
...
With Camp
.Item(cdoSendUsingMethod) = 2
.Item(cdoSMTPServer) = RsParametros!servidorsmtp
.Item(cdoSMTPConnectionTimeout) = 300 [ô] Tempo
.Item(cdoSMTPAuthenticate) = RsParametros!Autenticacao
.Item(cdoSendUserName) = RsParametros!usuarioautenticacao
.Item(cdoSendPassword) = RsParametros!Senha
.Update
End With
...
Por
...
With Camp
.Item([Ô]http://schemas.microsoft.com/cdo/configuration/sendusing[Ô]) = 2
.Item([Ô]http://schemas.microsoft.com/cdo/configuration/smtpserver[Ô]) = RsParametros!servidorsmtp
.Item([Ô]http://schemas.microsoft.com/cdo/configuration/smtpauthenticate[Ô]) = 1
[ô].Item(cdoSMTPConnectionTimeout) = 300 [ô] Tempo [ô]determinar o timeout pode [Ô]frustrar[Ô] por conta da nossa qualidade de serviços de banda-larga e telefonia em geral.
.Item([Ô]http://schemas.microsoft.com/cdo/configuration/sendusername[Ô]) = RsParametros!usuarioautenticacao
.Item([Ô]http://schemas.microsoft.com/cdo/configuration/sendpassword[Ô]) = RsParametros!Senha
[txt-color=#e80000].Item([Ô]http://schemas.microsoft.com/cdo/configuration/smtpserverport[Ô]) = 465 [ô](587 é sem SSL)[/txt-color]
[txt-color=#e80000].Item([Ô]http://schemas.microsoft.com/cdo/configuration/smtpusessl[Ô]) = True [ô]Aqui se determina usar o SSL[/txt-color]
.Update
End With
...
Desculpa pela demora,
O gmail trabalha com a porta 587,minha dll que eu uso aqui em ambiente dt net funciona perfeitamente com as configuraçoes,cheguei agora no serviço,irei abrir o font da dll e recompilar novamente e testar,logo lhe passo novamente..
falow!
O gmail trabalha com a porta 587,minha dll que eu uso aqui em ambiente dt net funciona perfeitamente com as configuraçoes,cheguei agora no serviço,irei abrir o font da dll e recompilar novamente e testar,logo lhe passo novamente..
falow!
Tópico encerrado , respostas não são mais permitidas