Sending e-mail with CDO and SSL
- Rick Lipkin
- Posts: 2397
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Sending e-mail with CDO and SSL
To All Concerned
I found this thread in the FW Spanish forum and noticed in one of the links the use of SSL and CDO to send e-mail
http://forums.fivetechsupport.com/viewt ... =6&t=13175
Within the thread was a link to a VIsual FoxPro forum which gives an example of using CDO and SSL..
http://www.portalfox.com/index.php?name ... me=Printer
I have not tried the above code, but I thought it was worth a look for those who use FWH to send e-mail thru their apps.
Let me know if anyone is successful using the FoxPro code.
Thanks
Rick Lipkin
I found this thread in the FW Spanish forum and noticed in one of the links the use of SSL and CDO to send e-mail
http://forums.fivetechsupport.com/viewt ... =6&t=13175
Within the thread was a link to a VIsual FoxPro forum which gives an example of using CDO and SSL..
http://www.portalfox.com/index.php?name ... me=Printer
I have not tried the above code, but I thought it was worth a look for those who use FWH to send e-mail thru their apps.
Let me know if anyone is successful using the FoxPro code.
Thanks
Rick Lipkin
-
- Posts: 113
- Joined: Wed Mar 11, 2009 7:32 pm
- Location: Obregon, Sonora, Mexico
Re: Sending e-mail with CDO and SSL
hi,,,
**************************************************************
* Enviando emails *
* *
* Desenvolvedor: Ricardo de Moura Marques *
* email: ricardomouramarques@hotmail.com *
* *
* Agradecimentos ao Alessandro Seribeli Barreto - "Ale SB" *
* pelo código inicial, sem o qual, esse projeto *
* não seria possível *
* *
***************************************************************
sas
Code: Select all
Function Config_eMail(cdest, cfiles )
Local cUser,cPass,cRemt, cCC, cCCO, cTxt, cSubject
local lRet := .f.
local oCfg, oError
local cServ :=alltrim(correo:smtp) // aServs[nServ][2] //--> SERVIDOR SMTP - "smtp.servidor.com.br"
local nPort :=val(alltrim(correo:puerto)) // aServs[nServ][3]
local lAut :=.t.
local lSSL :=.f. // aServs[nServ][4]
public correo
if cfiles=nil
aAttach:={}
else
aAttach:=cfiles
endif
cPass:=alltrim(correo:contra)
cuser:=alltrim(correo:usuario)
ctxt:= correo:MENSA
csubject:=correo:texto
ccc:=""
ccco:=""
cRemt:=alltrim(correo:usuario)
// cdest:="chino72vale@hotmail.com" // ay que pasas esta informacion ok
cCC:=""
cCCO:=""
// aAttach:=CFILES // serian los archivos anexados we
if Empty(cPass) .or. Empty(cRemt) .or. empty(cDest)
? "falta datos para mandar correo,,,, destino/ remitente / usuario checar "
return .f.
endif
TRY
oCfg := CREATEOBJECT( "CDO.Configuration" )
WITH OBJECT oCfg:Fields
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value := cServ
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := nPort
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ):Value := 2
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := lAut
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := lSSL
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value := cUser
:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := cPass
:Update()
END WITH
lRet := .t.
CATCH oError
MsgInfo( "No se pudo enviar e-Mail!" +CRLF+ ;
"Error: " + Transform(oError:GenCode, nil) + ";" +CRLF+ ;
"SubC: " + Transform(oError:SubCode, nil) + ";" +CRLF+ ;
"OSCode: " + Transform(oError:OsCode, nil) + ";" +CRLF+ ;
"SubSystem: " + Transform(oError:SubSystem, nil) + ";" +CRLF+ ;
"Mensaje: " + oError:Description, "Atención" )
END
//--> FIM DAS CONFIGURAÇOES.
if lRet
lRet := Envia_eMail(oCfg,cRemt,cDest, cCC, cCCO, cTxt, cSubject)
endif
Return lRet
********************************************************************************
Function Envia_eMail(oCfg,cFrom, cTo, cCC, cBCC, cMsg, cSubject)
local cToken
local lRet := .f. , Omsg , x, i, loBP
TRY
oMsg := CREATEOBJECT ( "CDO.Message" )
WITH OBJECT oMsg
:Configuration = oCfg
:From = cFrom
:To = cTo
:CC = cCC
:BCC = cBCC
:Subject = cSubject
:TextBody = cMsg
For x := 1 To Len( aAttach )
if aAttach[x] <> NIL
:AddAttachment(AllTrim(aAttach[x]))
endif
Next
:HTMLBody = "<p><img src='cid:id_imagen10'></p>" +"<p>La imagen de arriba esta embebida en el mensaje.</p>"
loBP:=:AddRelatedBodyPart("c:\faceleben\kasto2.bmp", "id_imagen10", 1)
WITH OBJECT loBP:Fields
:Item("urn:schemas:mailheader:Content-ID") = "id_imagen10"
:Update()
END WITH
:CreateMHTMLBody("File://c:\faceleben\suave.html",0)
:Send()
END WITH
lRet := .t.
CATCH
// MsgInfo("No se pudo mandar la factura ")
lRet := .f.
END
Return lRet
* Enviando emails *
* *
* Desenvolvedor: Ricardo de Moura Marques *
* email: ricardomouramarques@hotmail.com *
* *
* Agradecimentos ao Alessandro Seribeli Barreto - "Ale SB" *
* pelo código inicial, sem o qual, esse projeto *
* não seria possível *
* *
***************************************************************
sas
Benjamin Casarrubias Moreno
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
Re: Sending e-mail with CDO and SSL *ERROR*
I am trying this out. Here is my code for the send function:
On my non-SSL service, it works fine. However, when on an email account requiring SSL, we see the following error from the Send( )
DISP_E_MEMBERNOTFOUND
I've tried a websearch and found there was a thread on this in the Five Win forum, but what worked for someone else didn't fix it here. The values in the TabMail array are accurate.
I hope someone can succeed with this problem.
Tim
Code: Select all
Function CDOSendMail( aTabMail )
Local oEmailCfg,oEmailMsg
TRY
oEmailCfg := CREATEOBJECT( "CDO.Configuration" )
WITH OBJECT oEmailCfg:Fields
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value := TRIM( aTabMail[01] ) //"mail.xxxxxxxx.com"
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := aTabMail[11] // 25
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ):Value := 2 // Remote SMTP = 2, local = 1
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := aTabMail[08] // .T.
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := .T.
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value := TRIM( aTabMail[09] ) // "xxanser@xxxxxxxx.com"
:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := TRIM( aTabMail[10] ) // "xxxxxx"
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value := 30
:Update()
END WITH
CATCH oError
MsgInfo( "Could not create message configuration" + ";" + ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + ;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + ;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" + ;
"Message: " + oError:Description )
Return .F.
END
oError:=NIL
TRY
oEmailMsg := CREATEOBJECT ( "CDO.Message" )
WITH OBJECT oEmailMsg
:Configuration = oEmailCfg
:From = aTabMail[02] //chr(34)+" Anser K.K. "+chr(34)+ "<anser@xxxxxxxx.com>" // This will be displayed in the From (The email id does not appear)
:To = TRIM( aTabMail[03] ) // "xxanserkk@xxxxx.com" // <----- Place the TO email address
:Subject = aTabMail[04] // "This is a Tst message"
//:ReplyTo = aTabMail[02] //"xxanser@xxxxxxxxx.com"
//:Sender = aTabMail[02] //"xxanser@xxxxxxxxx.com" // Read Receipt message is send to this
//:Organization = TRIM( aTabMail[02] ) // "My xxxxxx Company" // "My Company Name"
:MDNRequested = .T.
:HTMLBody = "<HTML> " + TRIM( aTabMail[05] ) + " </HTML>"
IF LEN( aTabMail[06] ) > 0
For nEle := 1 To Len( aTabMail[06] )
:AddAttachment( ALLTRIM(aTabMail[06][nEle] )) // := AllTrim( aAttach[ nEle ] )
Next
ENDIF
:Send()
END WITH
SysRefresh()
CATCH oError
MsgInfo( "Could not send message" + ";" + CRLF+ ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + CRLF+;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + CRLF+ ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + CRLF +;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" +CRLF+ ;
"Message: " + oError:Description )
Return .F.
END
Return( .t. )
DISP_E_MEMBERNOTFOUND
I've tried a websearch and found there was a thread on this in the Five Win forum, but what worked for someone else didn't fix it here. The values in the TabMail array are accurate.
I hope someone can succeed with this problem.
Tim
Tim Stone
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
-
- Posts: 113
- Joined: Wed Mar 11, 2009 7:32 pm
- Location: Obregon, Sonora, Mexico
Re: Sending e-mail with CDO and SSL
hi, tim
http://www.recursosvisualbasic.com.ar/h ... ft-cdo.htm
sas
Code: Select all
' Configura las opciones para el login en el SMTP
If Usar_Autentificacion Then
' Id de usuario del servidor Smtp ( en el caso de gmail, debe ser la dirección de correro _
mas el @gmail.com )
Obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = Usuario
' Password de la cuenta
Obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = Password
' Indica si se usa SSL para el envío. En el caso de Gmail requiere que esté en True
Obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = Usar_SSL
End If
sas
Benjamin Casarrubias Moreno
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
Re: Sending e-mail with CDO and SSL
In the code I supplied, all three of those items are referenced properly.
Tim
Tim
Tim Stone
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: Sending e-mail with CDO and SSL
Tim,
Are you using the code supplied here?
http://forums.fivetechsupport.com/viewt ... ail#p82081
Have you checked to see if your firewall is blocking the port?
Have you tried increasing the timeout value?
Regards,
James
Are you using the code supplied here?
http://forums.fivetechsupport.com/viewt ... ail#p82081
Have you checked to see if your firewall is blocking the port?
Have you tried increasing the timeout value?
Regards,
James
Re: Sending e-mail with CDO and SSL
James,
Yes, that is where the code is from.
The settings are identical to Outlook, which is working, so the port is not blocked.
The timeout value is set to 30 but the error reports back much more quickly.
The question is, what element returns that error on :Send( )
Tim
Yes, that is where the code is from.
The settings are identical to Outlook, which is working, so the port is not blocked.
The timeout value is set to 30 but the error reports back much more quickly.
The question is, what element returns that error on :Send( )
Tim
Tim Stone
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: Sending e-mail with CDO and SSL
Tim,
I sent a test program to your email. Please let us know if it works for you.
Regards,
James
I sent a test program to your email. Please let us know if it works for you.
Regards,
James
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: Sending e-mail with CDO and SSL
Tim,
>The settings are identical to Outlook, which is working, so the port is not blocked.
I think this is where the problem may be. You MUST use port 465. Is that the port the Outlook is using? Is that the port your sample code is using? If not, try port 465.
I tried port 25 and it errors out, but port 465 works fine.
Regards,
James
>The settings are identical to Outlook, which is working, so the port is not blocked.
I think this is where the problem may be. You MUST use port 465. Is that the port the Outlook is using? Is that the port your sample code is using? If not, try port 465.
I tried port 25 and it errors out, but port 465 works fine.
Regards,
James
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: Sending e-mail with CDO and SSL
Tim,
May I suggest using a mail object rather than an array--it would be much easier to read.
Instead of:
aTabMail[02]
aTabMail[03]
aTabMail[04]
You would have:
oTabMail:From
oTabMail:To
oTabMail:Subject
It is so much easier to work with.
Regards,
James
May I suggest using a mail object rather than an array--it would be much easier to read.
Instead of:
aTabMail[02]
aTabMail[03]
aTabMail[04]
You would have:
oTabMail:From
oTabMail:To
oTabMail:Subject
It is so much easier to work with.
Regards,
James
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
- reinaldocrespo
- Posts: 918
- Joined: Thu Nov 17, 2005 5:49 pm
- Location: Fort Lauderdale, FL
Re: Sending e-mail with CDO and SSL
To send emails using ssl, at least from xharbour, you must link the open ssl lib: tipssl.lib
On your app directory you need to have these .dlls present:
libeay32.dll
ssleay32.dll
There are a few threads on the xharbour forum explaining how to build the .libs and where to download the .dlls from.
A simpler way to test if you have the open ssl libs linked, is trying to http to an https address. Once everything is in place, you can use xharbour's native emailing funcs.
Hope that helps,
Reinaldo.
On your app directory you need to have these .dlls present:
libeay32.dll
ssleay32.dll
There are a few threads on the xharbour forum explaining how to build the .libs and where to download the .dlls from.
A simpler way to test if you have the open ssl libs linked, is trying to http to an https address. Once everything is in place, you can use xharbour's native emailing funcs.
Hope that helps,
Reinaldo.
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Re: Sending e-mail with CDO and SSL
Can you provide a link to the location of the information and DLLs you mentioned?reinaldocrespo wrote: There are a few threads on the xharbour forum explaining how to build the .libs and where to download the .dlls from.
A simpler way to test if you have the open ssl libs linked, is trying to http to an https address. Once everything is in place, you can use xharbour's native emailing funcs.
I seem to remember, when I looked into this before, that you had to purchase some kind of security certificate? I expect this would be for each user?
I'm not sure how you can use FW's native email classes since they don't support SLL thus there are no native settings for SSL. At the least it would seem that you would have to subclass the TSMTP class to add the SLL settings.
Regards,
James
- reinaldocrespo
- Posts: 918
- Joined: Thu Nov 17, 2005 5:49 pm
- Location: Fort Lauderdale, FL
Re: Sending e-mail with CDO and SSL
download open ssl from:
http://slproweb.com/download/Win32Open ... B9F2BC1BF
Open ssl is an open source project. Nothing to purchase. The web server wishing to have an https address, needs to purchase a security certificate. Not so the user that connectes to it. Email server requiring ssl authentication, must have purchased their security certificate. Otherwise, they could not be offering/requiring ssl connections.
FW TSMTP native email does not send using ssl. You would have to change the class. To send emails using a server that requres ssl authentication, you would have to use xharbour native emaling funcs that inherit from xharbour's Tip class + have the ssl libs linked in. Again, there are a few users on the xharbour's ng that know a lot more than I do. I was helped by Luiz Rafael Culik from Brazil. It took me a while to understand, but since it has been working, I haven't looked at that again. It just works.
Reinaldo.
http://slproweb.com/download/Win32Open ... B9F2BC1BF
Open ssl is an open source project. Nothing to purchase. The web server wishing to have an https address, needs to purchase a security certificate. Not so the user that connectes to it. Email server requiring ssl authentication, must have purchased their security certificate. Otherwise, they could not be offering/requiring ssl connections.
FW TSMTP native email does not send using ssl. You would have to change the class. To send emails using a server that requres ssl authentication, you would have to use xharbour native emaling funcs that inherit from xharbour's Tip class + have the ssl libs linked in. Again, there are a few users on the xharbour's ng that know a lot more than I do. I was helped by Luiz Rafael Culik from Brazil. It took me a while to understand, but since it has been working, I haven't looked at that again. It just works.
Reinaldo.
- Rick Lipkin
- Posts: 2397
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: Sending e-mail with CDO and SSL
Tim and friends ..
Since I started this thread .. I wanted to make sure that we end it on the solution ..
Tim .. I cut and pasted this solution from your ( other ) thread that spawned from this one .. Please verify this is your solution to implementing CDO and SSl ..
Many thanks!
Rick Lipkin
Since I started this thread .. I wanted to make sure that we end it on the solution ..
Tim .. I cut and pasted this solution from your ( other ) thread that spawned from this one .. Please verify this is your solution to implementing CDO and SSl ..
Many thanks!
Rick Lipkin
Code: Select all
Function CDOSendMail( aTabMail )
Local oEmailCfg,oEmailMsg
/* Tabmail
01 = MAILSERVER // A correct mail server address
02 = MAILFROM // A valid originator of the message
03 = MAILTO // Who it is being sent to
04 = SUBJECT // The subect
05 = BODY // The body in text format
06 = ATTACHMENT // Attachment(s)
07 = BCC // Usually NIL NOT USED
08 = LAUTHORIZATION // T or F logical for authentication
09 = USERID pour MAILSERVER // The mail server Username
10 = PW pour MAILSERVER // The mail server password
11 = Mail port defaut = 25 // The port, default is 25, set to 465 for SSL
12 = Mail HTML page // An HTML page, usually not used
13 = ssl authentification // T or F logical for SSL
14 = Mail sender // Mail sender name NOT USED
15 = Organisation sender // Organization sender NOT USED
16 = Host // Host if needed NOT USED
*/
TRY
oEmailCfg := CREATEOBJECT( "CDO.Configuration" )
WITH OBJECT oEmailCfg:Fields
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value := TRIM( aTabMail[01] ) //"mail.xxxxxxxx.com"
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := aTabMail[11] // 25
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ):Value := 2 // Remote SMTP = 2, local = 1
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := aTabMail[08] // .T.
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := aTabMail[13]
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value := TRIM( aTabMail[09] ) // "xxanser@xxxxxxxx.com"
:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := TRIM( aTabMail[10] ) // "xxxxxx"
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"):Value := 30
:Update()
END WITH
CATCH oError
MsgInfo( "Could not create message configuration" + ";" + ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + ;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + ;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" + ;
"Message: " + oError:Description )
Return .F.
END
oError:=NIL
TRY
oEmailMsg := CREATEOBJECT ( "CDO.Message" )
WITH OBJECT oEmailMsg
:Configuration = oEmailCfg
:From = aTabMail[02] //chr(34)+" Anser K.K. "+chr(34)+ "<anser@xxxxxxxx.com>" // This will be displayed in the From (The email id does not appear)
:To = TRIM( aTabMail[03] ) // "xxanserkk@xxxxx.com" // <----- Place the TO email address
:Subject = aTabMail[04] // "This is a Tst message"
:MDNRequested = .T.
:TextBody = TRIM( aTabMail[05] )
IF LEN( aTabMail[06] ) > 0
For nEle := 1 To Len( aTabMail[06] )
:AddAttachment( ALLTRIM(aTabMail[06][nEle] )) // := AllTrim( aAttach[ nEle ] )
Next
ENDIF
END WITH
oEmailMsg:Send( )
CATCH oError
MsgInfo( "Could not send message" + ";" + CRLF+ ;
"Error: " + TRANSFORM(oError:GenCode, NIL) + ";" + CRLF+;
"SubC: " + TRANSFORM(oError:SubCode, NIL) + ";" + CRLF+ ;
"OSCode: " + TRANSFORM(oError:OsCode, NIL) + ";" + CRLF +;
"SubSystem: " + TRANSFORM(oError:SubSystem, NIL) + ";" +CRLF+ ;
"Message: " + oError:Description )
Return .F.
END
Return( .t. )