Send Email
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
-
- Posts: 108
- Joined: Sun Oct 09, 2005 6:12 pm
- Location: Mar del Plata - Argentina
- Contact:
Kleyton:
Search for tSmtp class modified by Luis Krause Mantilla, y have no problems sending email with that class:
Regards,
Search for tSmtp class modified by Luis Krause Mantilla, y have no problems sending email with that class:
Code: Select all
Function EnvMail(oBrw)
Local oBar, cHost :=SPAC(40), cSender := spac(40), hFocus
local cSubject := Space( 100 ), cMsg := Space( 255 ), lReceipt := .T.
Local SEL_FIELD1:={ { || SOLICITA->NOMBRE},{ || SOLICITA->EMAIL }},;
SEL_ENC1:={ "Nombre","Email"} ,cPaso:=.T.,cMail:=SPAC(40)
Local cRegis:=AUTORIZA->(RECNO()),cMsg2,cNombre:=spac(40),oEnvia, lAuth:=.T.
cSender := param->sender
cHost :=PARAM->SMTP
SELEAGREGA("SOLICITA",239,129,.F.,SEL_FIELD1,SEL_ENC1,2,"Destino para: Af. "+ALLTRIM(LEFT(AUTORIZA->APEYNOMB,25))+;
" - "+IF(!EMPTY(AUTORIZA->PARTIDO),AUTORIZA->PARTIDO,BUS_DES("PADRON",3,AUTORIZA->NROBENEF,"PARTIDOUG")) )
IF SALIR # 2
cNOmbre:=SOLICITA->NOMBRE
if !empty(SOLICITA->EMAIL)
cMail:=SOLICITA->EMAIL
else
cPaso:=pidemail(@cMail)
endif
if AUTORIZA->ESTADO == 'PENDI'
MSGSTOP(oemtoansi('La pr ctica seleccionada a£n no ha sido auditada'),oemtoansi('No puede enviar pr cticas pendientes'))
cPaso:=.F.
endif
IF cPaso
cSubject:="Cisbo XI-Solic.Autoriz.Nº "+PADL(AUTORIZA->NUMERO,5,"0")+" ("+;
IF(AUTORIZA->ESTADO="AUTOR","AUTORIZADA",IF(AUTORIZA->ESTADO="RECHA","RECHAZADA",""))+")"
// my defaults add by Quim
cMsg := ;
"Por la presente comunicamos "+IF(AUTORIZA->ESTADO="AUTOR","LA AUTORIZACION",IF(AUTORIZA->ESTADO="RECHA",;
"EL RECHAZO",IF(AUTORIZA->ESTADO='R.TRA',"EL RECHAZO TRANSITORIO","")))+" de la siguiente práctica:"+CRLF+;
+SPAC(50)+;
+CRLF+;
"Número de Autorización: "+PADL(AUTORIZA->NUMERO,5,"0")+CRLF+;
"Afiliado: "+AUTORIZA->NROBENEF+" - "+AUTORIZA->APEYNOMB+CRLF+;
"Partido: "+IF(!EMPTY(AUTORIZA->PARTIDO),AUTORIZA->PARTIDO,BUS_DES("PADRON",3,AUTORIZA->NROBENEF,"PARTIDOUG"))+CRLF+;
"Práctica: "+BUS_DES("PRACTICA",1,AUTORIZA->PRACTICA,"NOMBRE")+CRLF+;
"Prestador: "+ALLTRIM(AUTORIZA->PRESTADOR)+" Dir.: "+ALLTRIM(BUS_DES("PROVEEDO",2,AUTORIZA->PRESTADOR,"DIRECCION"))+;
" Loc.: "+ALLTRIM(BUS_DES("PROVEEDO",2,AUTORIZA->PRESTADOR,"LOCALIDAD"))+;
" Tel.: "+ALLTRIM(BUS_DES("PROVEEDO",2,AUTORIZA->PRESTADOR,"TELEFONO"))+CRLF+;
"Observaciones: "+AUTORIZA->RESPUESTA+CRLF
IF AUTORIZA->ESTADO=='AUTOR'
cMsg2:= ;
SPAC(50)+CRLF+;
+SPAC(50)+CRLF+;
+SPAC(50)+CRLF+;
"La presente autorización posee 30 dias de vigencia y deberá ser adjuntada al resto de la documentación"+CRLF+;
"que habitualmente se acompaña en la facturación mensual. En el resumen mensual de facturación deberá incluirse "+;
"el codigo de autorización de cada práctica facturada."
ELSE
cMsg2:= ""
ENDIF
// end by Quim
Define Window oWnd ;
FROM 5,5 TO 29,86;
Title oemtoansi("Enviar EMail - Autorizaci¢n N§ ")+PADL(AUTORIZA->NUMERO,5,"0")+;
" - Para: "+cNombre ;
Color GetSysColor( COLOR_WINDOWTEXT ), GetSysColor( COLOR_BTNFACE )
Define ButtonBar oBar _3D Of oWnd
oBar:SetFont( TFont():New( "MS Sans Serif", 0, -11,, .T. ) ) // to avoid runtime error in TBtnBmp class!!!
Define Button oEnvia of oBar Prompt "S" Group ;
Action SendMail( oBrw,cRegis, oWnd, cMail, Alltrim( cHost ), AllTrim( cSender ), AllTrim( cSubject ),;
AllTrim( cMsg ), lReceipt,cMsg2 );
Static Function SendMail( oBrw,cRegis,oDlg,cDestino,cHost, cSender, cSubject, cMsg, lReceipt,cMsg2 )
Local oMail, oInit,SS
Local cUser:="cores8@speedy.com.ar",cPass:="690810"
cUser:=ALLTRIM(PARAM->SENDER)
SS=SECONDS()
// initialize sockets (or nothing will happen) - it's a quirk in GetHostByName(), not TSmtp
oInit := TSmtp():New( cHost )
// no let's go for our socket
*oMail := TSmtp():New( cHost, , lAuth, cUser, cPass ) // [jlalin], IBTC
oMail := TSmtp():New( cHost,,.T.,cUser,cPass )
oMail:nGMT := -8 // Pacific Standard Time (GMT -08:00) - Adjust this to your own Time Zone!
// uncomment next line if you experience problems while sending email / descomentar sig. l¡nea en caso de experimentar problemas al enviar correo
oMail:nDelay := 1
//oMail:lTxtAsAttach := .F. // uncomment to force txt, log and htm files as inline as opposed to attachement
oMail:oSocket:lDebug := .T. // uncomment to create log file
oMail:oSocket:cLogFile := "smtp.log"
OMAIL:bDone={|| TONE(1000,1),MSGINFO('Mail enviado con exito en '+NTRIM((SECONDS()-SS))+' Segundos','Aviso') ,;
REEMPLAZA(oBrw,cRegis),oWnd:End()}
oMail:bConnecting := {|| oWnd:SetMsg( "Conectando a " + cHost + " (" + oMail:cIPServer + ") and waiting for response..." ) }
oMail:bConnected := {|| oWnd:SetMsg( "Conectado y enviando email..." ) }
cSender:=ALLTRIM(cSender)
cDestino:=ALLTRIM(cDestino)
oMail:SendMail( ;
cSender, ; // from/de
{ cDestino }, ; // to/para (arreglo) - I use cSender here also because it's an "autotest". Actually you would type a different address here
cMsg,;
cSubject,; // Subject/Asunto
{}, ; // Array of filenames to attach/Arreglo de nombres de archivos a agregar
{}, ; // aCC
{}, ; // aBCC
lReceipt, ; // Return Receipt/acuse de recibo
cMsg2 ) // msg in HTML format/mensaje en HTML
oInit:end()
SS=SECONDS()
Return .T.
My sendmail is work well.
Dear Kleyton,
This is my sendmail procedure is working perfectly for me and it may help.
*-----------------------------*
Static Function SendMails(aRecNo)
local mDlg, oGet[4], oBtn[2]
local lSave := .F.
local cAtt, cSub, cText
local cHost, aHost, aAtt
aAtt := {}
aHost := {}
OPENFILE('EZMAIL','MAL')
do while !MAL->(Eof())
aadd( aHost, left(rtrim(MAL->MAL_ADDR)+' ('+rtrim(MAL->MAL_SMTP)+')'+space(360),360) )
MAL->(DbSkip())
end
CLOSEFILE('MAL')
if !empty(aHost)
cHost := aHost[1]
cSub := space(100)
cText := space(4096)
DEFINE DIALOG mDlg RESOURCE 'EMAIL' TITLE TE('ข้อความที่ต้องการส่ง','Enter sending message') FONT MEMVAR->oFont
REDEFINE COMBOBOX oGet[1] VAR cHost ITEMS aHost ID 101 OF mDlg
REDEFINE GET oGet[2] VAR cSub ID 102 OF mDlg
REDEFINE BTNGET oGet[3] VAR cAtt ID 103 OF mDlg ;
ACTION (cAtt := cGetFile('Jpeg |*.JPG|Bitmap |*.BMP|','Load From File',,'IMAGE\',,.T.), oGet[3]:Refresh(), oGet[4]:SetFocus())
* ACTION (SelFile(oGet[3],'.','*.BMP',rtrim(cAtt)), oGet[4]:SetFocus())
REDEFINE GET oGet[4] VAR cText ID 104 OF mDlg MULTILINE
oGet[4]:bGotFocus := {|| oGet[4]:SetPos(0) }
REDEFINE SBUTTON oBtn[1] ID 11 ;
RESOURCE 'SENDMAIL', 'SENDMAIL', 'SENDMAIL', 'SENDMAIL' ;
PROMPT TE('ส่ง','&Send') ;
WHEN (!empty(cHost).and.!empty(cSub)) ;
ACTION (lSave := .T., mDlg:End()) ;
COLOR {|oBtn| If( oBtn:lMouseOver, CLR_YELLOW, CLR_BLACK ) } ;
TEXT ON_RIGHT
REDEFINE SBUTTON oBtn[2] ID 12 ;
RESOURCE 'CANCEL', 'CANCEL', 'CANCEL', 'CANCEL' ;
PROMPT TE('ยกเลิก','&Cancel') ;
ACTION ( mDlg:End() ) ;
COLOR {|oBtn| If( oBtn:lMouseOver, CLR_YELLOW, CLR_BLACK ) } ;
TEXT ON_RIGHT
ACTIVATE DIALOG mDlg CENTER RESIZE16
if lSave
if !empty(cAtt)
aadd( aAtt, cAtt )
end
MsgRun( "This messages is sending now",;
"E-mail is sending, please wait...",;
{ | oDlg | UpdCaption( oDlg, cHost, cSub, aAtt, cText ) } )
end
else
MsgStop(TE('ติตั้งบัญชีอินเทอร์เน็ตก่อนใช้ข้อนี้','Please set up internet account before use'))
end
return nil
*--------------------------------*
static function UpdCaption( oDlg, cHostName, cSubject, aAtt, cMsg )
local n, lMsgInfo, cHost, cSender, cTo, cCC
lMsgInfo := .F.
cHost := subs(cHostName,at('(',cHostName)+1,(at(')',cHostName)-at('(',cHostName))-1)
cSender := rtrim(subs(cHostName,1,at('(',cHostName)-1))
for n := 1 to len(aRecNo)
GST->(DbGoTo(aRecNo[n]))
cTo := lower(rtrim(GST->GST_EMAIL))
SendMail( oDlg, cHost, cSender, cTo, cCC,cSubject, cMsg, .F., aAtt, .F. )
oDlg:cMsg := "The messages have sent successfully "+;
LTrim( Str( nCount ) ) + " mail(s)"
oDlg:Refresh()
SysRefresh()
next
return nil
*------------------------------------------------------------------*
Function SendMail( oDlg, cHost, cSender, cTo, cCC, cSubject, cMsg, lReceipt, aAttach, lMsgInfo )
Local oMail, oInit
Default aAttach := {}, lReceipt := .F., lMsgInfo := .T.
// initialize sockets (or nothing will happen) - it's a quick in GetHostByName(), not TSmtp
oInit := TSmtp():New( cHost )
// no let's go for our socket
oMail := TSmtp():New( cHost )
oMail:nGMT := +7 // Pacific Standard Time (GMT -08:00) - Adjust this to your own Time Zone!
// uncomment next line if you experience problems while sending email / descomentar sig. lกnea en caso de experimentar problemas al enviar correo
oMail:nDelay := 1
//oMail:lTxtAsAttach := .F. // uncomment to force txt, log and htm files as inline as opposed to attachement
oMail:oSocket:lDebug := .T. // uncomment to create log file
oMail:oSocket:cLogFile := "smtp.log"
oMail:bConnecting := {|| oDlg:SetMsg( "Connecting to " + cHost + " (" + oMail:cIPServer + ") and waiting for response..." ) }
oMail:bConnected := {|| oDlg:SetMsg( "Connected and sending mail and attachments..." ) }
if lMsgInfo
oMail:bDone := {|| MsgInfo('Mail sent complete') }
else
oMail:bDone := {|| nCount++ }
end
oMail:SendMail( ;
cSender, ; // from/de
{ cTo }, ; // to/para (arreglo) - I use cSender here also because it's an "autotest". Actually you would type a different address here
cMsg,; // "Hi guys:" + CRLF + "I've sent this from within FiveWin using TSmtp class" + CRLF + "This is just my first attempt to see if it works.",; // Body/Mensaje
cSubject,; // Subject/Asunto
aAttach ; // Array of filenames to attach/Arreglo de nombres de archivos a agregar
) // msg in HTML format/mensaje en HTML
oInit:end()
Return .T.
This is my sendmail procedure is working perfectly for me and it may help.
*-----------------------------*
Static Function SendMails(aRecNo)
local mDlg, oGet[4], oBtn[2]
local lSave := .F.
local cAtt, cSub, cText
local cHost, aHost, aAtt
aAtt := {}
aHost := {}
OPENFILE('EZMAIL','MAL')
do while !MAL->(Eof())
aadd( aHost, left(rtrim(MAL->MAL_ADDR)+' ('+rtrim(MAL->MAL_SMTP)+')'+space(360),360) )
MAL->(DbSkip())
end
CLOSEFILE('MAL')
if !empty(aHost)
cHost := aHost[1]
cSub := space(100)
cText := space(4096)
DEFINE DIALOG mDlg RESOURCE 'EMAIL' TITLE TE('ข้อความที่ต้องการส่ง','Enter sending message') FONT MEMVAR->oFont
REDEFINE COMBOBOX oGet[1] VAR cHost ITEMS aHost ID 101 OF mDlg
REDEFINE GET oGet[2] VAR cSub ID 102 OF mDlg
REDEFINE BTNGET oGet[3] VAR cAtt ID 103 OF mDlg ;
ACTION (cAtt := cGetFile('Jpeg |*.JPG|Bitmap |*.BMP|','Load From File',,'IMAGE\',,.T.), oGet[3]:Refresh(), oGet[4]:SetFocus())
* ACTION (SelFile(oGet[3],'.','*.BMP',rtrim(cAtt)), oGet[4]:SetFocus())
REDEFINE GET oGet[4] VAR cText ID 104 OF mDlg MULTILINE
oGet[4]:bGotFocus := {|| oGet[4]:SetPos(0) }
REDEFINE SBUTTON oBtn[1] ID 11 ;
RESOURCE 'SENDMAIL', 'SENDMAIL', 'SENDMAIL', 'SENDMAIL' ;
PROMPT TE('ส่ง','&Send') ;
WHEN (!empty(cHost).and.!empty(cSub)) ;
ACTION (lSave := .T., mDlg:End()) ;
COLOR {|oBtn| If( oBtn:lMouseOver, CLR_YELLOW, CLR_BLACK ) } ;
TEXT ON_RIGHT
REDEFINE SBUTTON oBtn[2] ID 12 ;
RESOURCE 'CANCEL', 'CANCEL', 'CANCEL', 'CANCEL' ;
PROMPT TE('ยกเลิก','&Cancel') ;
ACTION ( mDlg:End() ) ;
COLOR {|oBtn| If( oBtn:lMouseOver, CLR_YELLOW, CLR_BLACK ) } ;
TEXT ON_RIGHT
ACTIVATE DIALOG mDlg CENTER RESIZE16
if lSave
if !empty(cAtt)
aadd( aAtt, cAtt )
end
MsgRun( "This messages is sending now",;
"E-mail is sending, please wait...",;
{ | oDlg | UpdCaption( oDlg, cHost, cSub, aAtt, cText ) } )
end
else
MsgStop(TE('ติตั้งบัญชีอินเทอร์เน็ตก่อนใช้ข้อนี้','Please set up internet account before use'))
end
return nil
*--------------------------------*
static function UpdCaption( oDlg, cHostName, cSubject, aAtt, cMsg )
local n, lMsgInfo, cHost, cSender, cTo, cCC
lMsgInfo := .F.
cHost := subs(cHostName,at('(',cHostName)+1,(at(')',cHostName)-at('(',cHostName))-1)
cSender := rtrim(subs(cHostName,1,at('(',cHostName)-1))
for n := 1 to len(aRecNo)
GST->(DbGoTo(aRecNo[n]))
cTo := lower(rtrim(GST->GST_EMAIL))
SendMail( oDlg, cHost, cSender, cTo, cCC,cSubject, cMsg, .F., aAtt, .F. )
oDlg:cMsg := "The messages have sent successfully "+;
LTrim( Str( nCount ) ) + " mail(s)"
oDlg:Refresh()
SysRefresh()
next
return nil
*------------------------------------------------------------------*
Function SendMail( oDlg, cHost, cSender, cTo, cCC, cSubject, cMsg, lReceipt, aAttach, lMsgInfo )
Local oMail, oInit
Default aAttach := {}, lReceipt := .F., lMsgInfo := .T.
// initialize sockets (or nothing will happen) - it's a quick in GetHostByName(), not TSmtp
oInit := TSmtp():New( cHost )
// no let's go for our socket
oMail := TSmtp():New( cHost )
oMail:nGMT := +7 // Pacific Standard Time (GMT -08:00) - Adjust this to your own Time Zone!
// uncomment next line if you experience problems while sending email / descomentar sig. lกnea en caso de experimentar problemas al enviar correo
oMail:nDelay := 1
//oMail:lTxtAsAttach := .F. // uncomment to force txt, log and htm files as inline as opposed to attachement
oMail:oSocket:lDebug := .T. // uncomment to create log file
oMail:oSocket:cLogFile := "smtp.log"
oMail:bConnecting := {|| oDlg:SetMsg( "Connecting to " + cHost + " (" + oMail:cIPServer + ") and waiting for response..." ) }
oMail:bConnected := {|| oDlg:SetMsg( "Connected and sending mail and attachments..." ) }
if lMsgInfo
oMail:bDone := {|| MsgInfo('Mail sent complete') }
else
oMail:bDone := {|| nCount++ }
end
oMail:SendMail( ;
cSender, ; // from/de
{ cTo }, ; // to/para (arreglo) - I use cSender here also because it's an "autotest". Actually you would type a different address here
cMsg,; // "Hi guys:" + CRLF + "I've sent this from within FiveWin using TSmtp class" + CRLF + "This is just my first attempt to see if it works.",; // Body/Mensaje
cSubject,; // Subject/Asunto
aAttach ; // Array of filenames to attach/Arreglo de nombres de archivos a agregar
) // msg in HTML format/mensaje en HTML
oInit:end()
Return .T.