/* * Proyecto: Xailer * Fichero: CdoMail.prg * Descripción: CdoMail send * Copyright 2017 José Lalín * Copyright 2017 Ignacio Ortiz de Zuñiga * Copyright 2017 Xailer.com * All rights reserved */ #include "Xailer.ch" #translate CdoProp( ) => ; "http://schemas.microsoft.com/cdo/configuration/" + //------------------------------------------------------------------------------ CLASS XCDOMail FROM TComponent PUBLISHED: PROPERTY cServer INIT "" PROPERTY nPort INIT 0 PROPERTY lAuthenticate INIT .F. PROPERTY lSSL INIT .F. PROPERTY lGmailOptions INIT .F. WRITE METHOD SetGMailOptions PROPERTY cUser INIT "" PROPERTY cPassword INIT "" EDITOR PE_ExtendedString PROPERTY aAttachments INIT {} EDITOR PE_StringList PROPERTY cFrom INIT "" EDITOR PE_ExtendedString PROPERTY cTO INIT "" EDITOR PE_ExtendedString PROPERTY cCC INIT "" EDITOR PE_ExtendedString PROPERTY cBCC INIT "" EDITOR PE_ExtendedString PROPERTY cSubject INIT "" EDITOR PE_ExtendedString PROPERTY cMessage INIT "" EDITOR PE_ExtendedString PROPERTY lHTML INIT .F. PUBLIC: DATA lInstalled INIT .F. READONLY METHOD Create( oParent ) CONSTRUCTOR // --> Self METHOD Free() // --> Nil METHOD Send() // --> lSuccess PROTECTED: DATA oObj METHOD SetGmailOptions( Value ) ENDCLASS //------------------------------------------------------------------------------ METHOD Create( oParent ) CLASS XCDOMail LOCAL oError ::Super:Create( oParent ) TRY ::oObj := WIN_OLECreateObject( "CDO.Message" ) IF ValType( ::oObj ) == "O" ::lInstalled := .T. ENDIF CATCH ::lInstalled := .F. END RETURN Self //------------------------------------------------------------------------------ METHOD Free() CLASS XCDOMail ::Super:Free() ::oObj := Nil RETURN Nil //------------------------------------------------------------------------------ METHOD Send() CLASS XCDOMail LOCAL oCfg := WIN_OLECreateObject( "CDO.Configuration" ) LOCAL lSuccess := .F., nAttach:=1, nTo:=1 WITH OBJECT oCfg:Fields :Item( CdoProp( "smtpserver" ) ):Value := ::cServer :Item( CdoProp( "smtpserverport" ) ):Value := ::nPort :Item( CdoProp( "smtpauthenticate" ) ):Value := IF( ::lAuthenticate, 1, 0 ) :Item( CdoProp( "smtpusessl" ) ):Value := IF( ::lSSL, 1, 0 ) :Item( CdoProp( "sendusername" ) ):Value := ::cUser :Item( CdoProp( "sendpassword" ) ):Value := ::cPassword :Item( CdoProp( "sendusing" ) ):Value := 2 :Update() END WITH OBJECT ::oObj :Configuration := oCfg :From := ::cFrom :To := ::cTo :Subject := ::cSubject :Cc := ::cCC :Bcc := ::cBCC IF ::lHTML :HTMLBody := ::cMessage ELSE :TextBody := ::cMessage ENDIF :Attachments:DeleteAll() For nAttach:=1 to Len( ::aAttachments ) :Addattachment( ::aAttachments[ nAttach ] ) Next TRY lSuccess := ( :Send() == Nil ) CATCH lSuccess := .F. END END oCfg := Nil RETURN lSuccess //------------------------------------------------------------------------------ METHOD SetGmailOptions( Value ) CLASS XCDOMail ::FlGmailOptions := Value IF Value ::cServer := "smtp.gmail.com" ::nPort := 465 ::lAuthenticate := .T. ::lSSL := .T. ELSE ::cServer := "" ::nPort := 0 ::lAuthenticate := .F. ::lSSL := .F. ENDIF RETURN Value