ENVIAR EMAIL COM AUTENTICACAO SSL COM O VBSENDMAIL

PHOENIX209E 26/10/2011 16:42:31
#387824
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
ALVAROVB2009 26/10/2011 17:23:19
#387826
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?
PROFESSOR 26/10/2011 22:27:44
#387843
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):

    ...
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.
ALVAROVB2009 26/10/2011 22:45:18
#387846
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
PROFESSOR 26/10/2011 23:23:27
#387854
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):

    ...
[ô]------
[ô] 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
...

ALVAROVB2009 26/10/2011 23:33:32
#387855
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?
PROFESSOR 26/10/2011 23:59:34
#387859
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.
ALVAROVB2009 27/10/2011 00:12:28
#387860
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.

PROFESSOR 27/10/2011 01:44:26
#387865
Até tem uma, mas como eu já havia postado, creio que você já testou.

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
...


PHOENIX209E 27/10/2011 07:48:03
#387875
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!
Página 2 de 3 [30 registro(s)]
Tópico encerrado , respostas não são mais permitidas