Campo "cReplyTo" com win_OleCreateObject() e CDO

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Campo "cReplyTo" com win_OleCreateObject() e CDO

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Campo "cReplyTo" com win_OleCreateObject() e CDO

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campo "cReplyTo" com win_OleCreateObject() e CDO

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Campo "cReplyTo" com win_OleCreateObject() e CDO

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campo "cReplyTo" com win_OleCreateObject() e CDO

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campo "cReplyTo" com win_OleCreateObject() e CDO

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Campo "cReplyTo" com win_OleCreateObject() e CDO

Mensagem 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
%>
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Campo "cReplyTo" com win_OleCreateObject() e CDO

Mensagem 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...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Campo "cReplyTo" com win_OleCreateObject() e CDO

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder