Página 1 de 1

Campo "cReplyTo" com win_OleCreateObject() e CDO

Enviado: 01 Mar 2025 10:56
por Jairo Maia
Olá Pessoal,

Na função de envio de email tip_MailSend(), tem um campo que é "cReplyTo", onde o email colocado nele, será o email de resposta.

Ocorre que tive que substituir a funão tip_MailSend() pela função win_OleCreateObject("CDO.Configuration"), porque a tip_MailSend() estava dando erro em máquinas com Windows 11, que não lia a lib libcrypto-1_1.dll e o sistema não iniciava.

A pergunta é: Como configuro na win_OleCreateObject( "CDO.Configuration" ) o email de resposta?

A configuração do meu CDO está assim (a padrão):

Código: Selecionar todos

oCdo := win_OleCreateObject("CDO.Configuration")

WITH OBJECT oCdo:Fields

  :Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ):Value        := 2
  :Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := .T.
  :Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value       := .T.
  :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value   := 465
  :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value       := cHost
  :Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value     := cFrom
  :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value     := cPassword

  :Update()

 END WITH

Campo "cReplyTo" com win_OleCreateObject() e CDO

Enviado: 01 Mar 2025 11:29
por sygecom
Abaixo a documentação para o que deseja:

https://learn.microsoft.com/en-us/previ ... =exchg.65)

Sugestão: fuja do CDO, várias máquinas e provedores já tive problema usando-o, atualmente uso AWS SES para envio de e-mail, apenas sugestão.

Campo "cReplyTo" com win_OleCreateObject() e CDO

Enviado: 01 Mar 2025 14:04
por Itamar M. Lins Jr.
Olá!
que não lia a lib libcrypto-1_1.dll e o sistema não iniciava.
Verificou se é 32 ou 64 Bit ?
Provavelmente é esse o problema.
Uso aqui, com win10/11 ainda sem esse problema.

Saudações,
Itamar M. Lins Jr.

Campo "cReplyTo" com win_OleCreateObject() e CDO

Enviado: 01 Mar 2025 15:01
por Jairo Maia
Itamar M. Lins Jr. escreveu:Verificou se é 32 ou 64 Bit ?
Sim. No Windows 10 64 bit funciona, e os Windows 11 que falham também são 64 bit.

Se com você funciona, não tenho idéia do que seja, mas tip_MailSend() comigo não funciona no Windows 11.

Campo "cReplyTo" com win_OleCreateObject() e CDO

Enviado: 01 Mar 2025 16:53
por Itamar M. Lins Jr.
Olá!
O GCC aqui pelo MSYS2 é o mais atual. UCRT64 ainda 14... estou atualizando agora...
Mas a versão a correr nos clientes é a 14.02 UCRT
Não tem como saber, ao certo ai seu caso. o win11 está ativado ? Peguei uns BO por conta de ativação do windows...

Saudações,
Itamar M. Lins Jr.

Campo "cReplyTo" com win_OleCreateObject() e CDO

Enviado: 01 Mar 2025 17:02
por Itamar M. Lins Jr.
Olá!
É 11/02/2025 19:34 5.234.675 libcrypto-3-x64.dll
X64 para GCC 64bit
E tenho minhas duvidas se precisa dela, pq acredito que só a SSL é necessário.
11/02/2025 19:34 997.309 libssl-3-x64.dll
libcrypto a full-strength general purpose cryptographic library. It constitutes the basis of the TLS implementation, but can also be used independently.
No caso é para TLS veja se está ativado no windows.
Mas o nome tem que ser com esse x64 no meio.

Saudações,
Itamar M. Lins Jr.

Campo "cReplyTo" com win_OleCreateObject() e CDO

Enviado: 02 Mar 2025 16:07
por JoséQuintas
Quanto às DLLs só suponho que existam pra 32 e 64 bits.
Além disso, o harbour geralmente é gerado pra uma DLL específica, nem sempre pode ser outra, mas tem que ser compatível 32/64 bits conforme harbour.
O pessoal confunde criar lib intermediária como fazer parte do EXE.

No xharbour, e em harbour antigo dá pra perceber isso.
No borland, se não me engano, era implib.
umadll.dll -> gerava a lib umadll.lib
Ao linqueditar, umadll.lib faz parte do EXE, mas é dependente de existir umadll.dll

É como se fosse gerado aquele hb_dynCall( ..... ) para a DLL.
Isso não é converter dll pra lib, é apenas criar uma lib de chamadas pra DLL.
E é obrigatório existir a DLL.

Com as alterações do Viktor nos tempos do harbour 3.4, foi transformado pra SHARED/DYNAMIC, permitindo existir ou não a DLL.
Isso permite que o EXE funcione, mas quando precisar da DLL ela precisa existir.
Melhora no ponto de vista de poder funcionar todo resto que não depende da DLL.

Tem o detalhe do Windows sobre DLL 32/64 bits, mas só referente ao registro, quando se aloca junto ao sistema operacional.
Não é toda lib que se faz isso - aquilo de usar regsvr32.
32 bits em SysWow64, 64 bits em System32
Não sei pra outras DLLs se faz diferença conforme a pasta, acredito que não.


No CDO perguntei pra cortana, mostrou exemplo em ASP, não muito diferente de harbour

Código: Selecionar todos

<%
'Create the e-mail server object
Set objCDOSYSMail = Server.CreateObject("CDO.Message")
Set objCDOSYSCon = Server.CreateObject("CDO.Configuration")

'Set and update CDO Configuration
With objCDOSYSCon
    ' Specify the authentication mechanism to basic (clear-text) authentication
    .Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    'SMTP Server username
    .Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "you@your-email-here.com"
    'SMTP Server password
    .Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "YourPasswordHere"
    'Out going SMTP server
    .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.websitelive.net"
    'SMTP port
    .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
    'TLS Encryption
    .Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendtls") = 1
    'CDO Port (1=localhost 2=network)
    .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    'Timeout
    .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
    'Update CDO Configuration
    .Fields.Update
End With

'Update the CDOSYS Configuration
Set objCDOSYSMail.Configuration = objCDOSYSCon

With objCDOSYSMail
    'Who the e-mail is from, this needs to be the same as your SMTP Server username
    .From = "<you@your-email-here.com>"
    'Who the e-mail is sent to
    .To = "<to@to-email-here.com>"
    'Who to reply-to when replying to the email
    .ReplyTo = "<reply-to@your-email-here.com>"
    'The subject of the e-mail
    .Subject = "Website Enquiry"
    'Set the e-mail body format (HTMLBody=HTML TextBody=Plain)
    .HTMLBody = "this is the body"
    '.TextBody = "this is the body"
    'Send the e-mail
    .Send
End With

'Close the server mail object
Set objCDOSYSMail = Nothing
Set objCDOSYSCon = Nothing
%>

Campo "cReplyTo" com win_OleCreateObject() e CDO

Enviado: 03 Mar 2025 08:09
por Jairo Maia
Olá Pessoal,
sygecom escreveu: fuja do CDO
Sim, na internet é vasto esse conselho, inclusive no próprio site da Microsoft consta que o CDO é entregue "as is", e não tem suporte ou atualizações.
JoséQuintas escreveu: perguntei pra cortana, mostrou exemplo em ASP, não muito diferente de harbour
Peguei também alguns exemplos na IA voltada a programação, a saber: https://chat.qwen.ai/, até consegui enviar o email usando alguns exemplos com CDO, mas quando clica em responder, a resposta fica para o emitente. Então após algumas tentativas desisti, e resolvi QUE VOU CONTINUAR COM A tip_MailSend().
JoséQuintas escreveu:Além disso, o harbour geralmente é gerado pra uma DLL específica, nem sempre pode ser outra, mas tem que ser compatível 32/64 bits conforme harbour.
Itamar M. Lins Jr. escreveu:É 11/02/2025 19:34 5.234.675 libcrypto-3-x64.dll
Pois é... Ossos do Ofício. Acho que eu estava mesmo é fazendo confusão, usando DLLs não mais compatíveis com a versão de compilação do Harbour, "eu acho".

Voltei para a tip_MailSend(), estou usando a versão do Harbour compilada em 20/01/2025, e peguei as DLLs libcrypto-1_1.dll e libssl-1_1.dll que estão na pasta hb32\bin e substitui na pasta do sistema, e em meus testes aqui funcionou tanto em Windows 7 (32bit), Windows 10 e Windows 11, ambos 64bit. Assim que o cliente voltar essa semana, vou atualizar na máquina dele, e fazer os testes lá.

Mas acho que o problema era esse mesmo: DLLs incompatíveis.

Valeu Pessoal...

Campo "cReplyTo" com win_OleCreateObject() e CDO

Enviado: 03 Mar 2025 09:49
por JoséQuintas
Só comentário, lembrei depois:
DLL aceita assinatura igual EXE.
Não sei se a segurança verifica isso, ou do windows, ou de algum antivírus.