Buenos dÃas, Enrico. Como dije antes, con un programa pequeño, ¡funciona! Con uno grande, no funciona. ¿Memoria?
Good morning Enrico. As I said before, with a SMALL PROGRAM, IT WORKS! When it is BIG, IT DOESN'T WORK. Memory?
// ****************************************************************************
// Empresa Desenvolvedora : SB Info System *
// Programador : Alessandro Seribeli Barreto - Ale SB *
// Contato: *
// Msn : aleseribeli@hotmail.com *
// eMail : ale.seribeli@ig.com.br *
// Skype : ale.sb *
// Fones : (18) 9782-3281 - (18) 3722-8639 - Andradina / SP *
// Versao 2.01 16/03/2010 *
// MODIFICADO EM: 02/06/2025 - By Joao Santos(Kapiaba)-kapiabafwh@gmail.com *
// ****************************************************************************
#Include "Fivewin.ch"
FUNCTION Main()
LOCAL cUser := Space(20), cPass := Space( 15 ), cRemt := Space( 40 ), ;
cDest := Space(40), cTime, aGrad, lSair := .F., oFnt, oFont, oBmp
LOCAL oDlg, oGet[4], oSay[6], oBtn[2]
cDest := "kapiabafwh@gmail.com" + SPACE(17)
aGrad := { { .50, nRGB( 210, 235, 216 ), nRGB( 255, 255, 255 ) } }
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD
DEFINE FONT oFnt NAME "Ms Sans Serif" SIZE 00, -12 BOLD
DEFINE DIALOG oDlg TITLE "..:: Teste de Envio de eMail BCC/GCC ::.." ;
FONT oFont GRADIENT aGrad
oDlg:nStyle := nOR( DS_MODALFRAME, DS_SYSMODAL, WS_POPUP, WS_CAPTION, WS_SYSMENU )
oDlg:lTransparent := .T.
oDlg:lHelpIcon := .F.
oDlg:nTop := 0
oDlg:nLeft := 0
oDlg:nBottom := 230
oDlg:nRight := 290
@ 002, 006 SAY oSay[ 1 ] PROMPT "Usuário: Somente o Nome" OF oDlg ;
SIZE 100, 08 COLOR CLR_BLUE PIXEL UPDATE
@ 012, 058 SAY oSay[ 2 ] PROMPT "@pleno.com.br" OF oDlg SIZE 60, 12 ;
COLOR CLR_BLACK PIXEL UPDATE
@ 022, 006 SAY oSay[ 3 ] PROMPT "PassWord:" OF oDlg SIZE 60, 12 PIXEL ;
COLOR METRO_ORANGE, CLR_WHITE UPDATE
@ 042, 006 SAY oSay[ 4 ] PROMPT "Remetente: Somente o Nome" OF oDlg ;
SIZE 150, 12 COLOR CLR_BLUE PIXEL UPDATE
@ 052, 058 SAY oSay[ 2 ] PROMPT "@pleno.com.br" OF oDlg SIZE 60, 12 ;
COLOR CLR_BLACK PIXEL UPDATE
@ 062, 006 SAY oSay[ 5 ] PROMPT "Destinatário: 01 Destinatário" OF oDlg ;
SIZE 150, 12 COLOR CLR_BLUE PIXEL UPDATE
@ 085, 006 SAY oSay[ 6 ] VAR cTime OF oDlg SIZE 50, 12 COLOR CLR_RED PIXEL;
UPDATE
@24, 114 BITMAP oBmp RESOURCE "FERRARI" SIZE 24, 30 PIXEL OF oDlg NOBORDER;
TRANSPARENT
@ 010, 006 GET oGet[ 1 ] VAR cUser SIZE 50, 10 PIXEL OF oDlg PICTURE "@" ;
UPDATE
oGet[ 1 ]:bValid := {| lRet | if( lRet := !Empty( cUser ), ( oGet[ 3 ]:VarPut( cUser ), oGet[ 3 ]:Refresh() ), ), lRet }
@ 030, 006 GET oGet[ 2 ] VAR cPass SIZE 50, 10 PIXEL OF oDlg UPDATE
oGet[ 2 ]:lPassWord := .T.
@ 050, 006 GET oGet[ 3 ] VAR cRemt SIZE 50, 10 PIXEL OF oDlg PICTURE "@" ;
UPDATE
@ 070, 006 GET oGet[ 4 ] VAR cDest SIZE 130, 10 PIXEL OF oDlg PICTURE "@" ;
UPDATE
@ 096, 010 BUTTONBMP oBtn[ 1 ] PROMPT " &Send Email" OF oDlg ;
SIZE 70, 14 PIXEL RESOURCE "142" TEXTRIGHT ;
ACTION ( cTime := "Aguarde...", oSay[ 6 ]:Refresh(), ;
IF( lRet := Config_Mail( Lower( AllTrim( cUser ) ), ;
AllTrim( cPass ), Lower( AllTrim( cRemt ) ), ;
Lower( AllTrim( cDest ) ) ), ;
MsgInfo( "Mensagem Enviada com Sucesso!", "Atençao" ), ), cTime := "", ;
oSay[ 6 ]:Refresh() )
oBtn[ 1 ]:bWhen := {|| !Empty( cUser ) }
@ 096, 090 BUTTONBMP oBtn[2] PROMPT " &Exit" OF oDlg SIZE 40, 14 PIXEL ;
RESOURCE "EXIT" TEXTRIGHT ACTION ( lSair := .T., oDlg:End() ) CANCEL
ACTIVATE DIALOG oDlg CENTERED VALID( lSair )
oFnt:End()
oFont:End()
RETURN NIL
FUNCTION Config_Mail( _cUser, cPass, _cRemt, cDest )
LOCAL lRet := .F.
LOCAL oCfg, oError
LOCAL cServ := "smtp.pleno.com.br" //-> SERVIDOR SMTP - "smtp.servidor.com.br"
LOCAL nPort := 587
LOCAL lAut := .T.
LOCAL lSSL := .F.
IF Empty( cPass ) .OR. Empty( _cRemt ) .OR. Empty( cDest )
MsgInfo( "Preencha Todos Campos Corretamente", ;
"Preencha Todos Campos Corretamente" )
RETURN( .F. )
ELSE
cUser := _cUser + "@pleno.com.br"
cRemt := _cRemt + "@pleno.com.br"
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( "Não Foi possÃvel Enviar o 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, "Atenção" )
END
// --> FIM DAS CONFIGURAÇOES.
IF lRet
lRet := Envia_Mail( oCfg, cRemt, cDest )
ENDIF
RETURN( lRet )
FUNCTION Envia_Mail( oCfg, cFrom, cDest )
LOCAL aAttach := {}, aTo := {}
LOCAL cToken
LOCAL lRet := .F.
LOCAL nEle
LOCAL cSubject, cMsg, cAttach
aTo := { cDest } // --> PARA
cSubject := "Teste de Envio de eMail - FWH .And. BCC/GCC" // --> ASSUNTO
cMsg := "Opa..chegou o trem," + CRLF + ;
"Este Fw eh Porreta mesmo..ehhehe."
#ifdef __XHARBOUR__ // PERFEITO COM XHARBOUR( I Like )
cAttach := Curdrive() + ":\" + CurDir() + "\caipira.jpg"
#Else // HARBOUR E ASSIM: ( No Like ) hahahahaha,
cAttach := HB_Curdrive() + ":\" + CurDir() + "\caipira.jpg"
#Endif
nEle := 1
WHILE .NOT. Empty( cToken := StrToken( cAttach, nEle++, "," ) )
SYSREFRESH()
AAdd( aAttach, cToken )
ENDDO
FOR i := 1 TO Len( aTo )
TRY
oMsg := CREATEOBJECT ( "CDO.Message" )
WITH OBJECT oMsg
:Configuration = oCfg
:FROM = cFrom
:TO = aTo[ i ]
:Subject = cSubject
:TextBody = cMsg
FOR x := 1 TO Len( aAttach )
:AddAttachment( AllTrim( aAttach[ x ] ) )
NEXT
:Send()
END WITH
lRet := .T.
CATCH
MsgInfo( "Não Foi PossÃvel Enviar," + CRLF + ;
"a Mensagem: " + CRLF + ;
cSubject + CRLF + ;
"p/ o eMail: " + aTo[ i ], "Atenção" )
lRet := .F.
END
NEXT
RETURN( lRet )
// FIN / END
Regards, saludos.