http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,8f569366-c76a-4873-9029-f31c07cf125e.aspx
Autor: Craig Boyd
Traducido por: Ana María Bisbé York
Esta serie de entradas de blog serán fundamentalmente códigos de ejemplo, lo que significa que voy a brindar ejemplos que funcionan (corte y pegue en un prg, tenga en cuenta que hay que hacer los cambios necesarios para que su entorno se corresponda y ejecute el código) que puede utilizar para explorar las diferentes facetas de enviar correo electrónico con VFP 9. Voy a cubrir varios temas en esta serie incluyendo varias tecnologías de enviar y recibir y productos de terceros: POP3, SMTP, MAPI, Outlook, CDO NTS, CDOSYS, JMAIL, ShellExecute, Blat, ESSMTP, OSSMTP, etc.
Comenzaré mostrando un ejemplo del empleo de MAPI para enviar un mensaje desde VFP9 que permita adjuntos, enviar con copias, con copia oculta e incluso un nombre de usuario y contraseña SMTP
******************************* *!* Ejemplo de utilización de SendViaMAPI ******************************* DIMENSION aryAttach(2) aryAttach(1) = "C:\attachment1.txt" && cambie a un archivo real que existe en su PC aryAttach(2) = "C:\attachment2.zip" && cambie a un archivo real que existe en su PC LOCAL lcTo, lcSubject, lcBody, lnCount, lcCC, lcBCC, lcUserName, lcPassword, llOpenEmail, lcErrReturn lcTo = "alguien@algundominio.com" lcSubject = "¿Ha intentado enviar un email con VFP?" lcBody = "Quiero hacerle saber que VFP es muy versátil" + CHR(13) + "y hay muchas formas de enviar un email." lcCC = "otro@otrodominio.com" lcBCC = "mijefe@dominiodeljefe.com" lcUserName = "yo@midominio.com" && mi nombre de usuario SMTP lcPassword = "Mi_PaSsWoRd" && mi contraseña SMTP *!* para enviar correo automáticamente haga llOpenEmail igual a .F. llOpenEmail = .T. && Si el correo se abrió o no, en el cliente de correo MAPI SendViaMAPI(@lcErrReturn, lcTo, lcSubject, lcBody, @aryAttach, lcCC, lcBCC, lcUserName, lcPassword, llOpenEmail) IF EMPTY(lcErrReturn) MESSAGEBOX("'" + lcSubject + "' se envió satisfactoriamente.", 64, "Envía email via MAPI") ELSE MESSAGEBOX("'" + lcSubject + "' falló al enviar. Causa:" + CHR(13) + lcErrReturn, 64, "Envía email via MAPI") ENDIF ******************************************* PROCEDURE SendViaMAPI(tcReturn, tcTo, tcSubject, tcBody, taFiles, tcCC, tcBCC, tcUserName, tcPassword, tlOpenEmail) ******************************************* #DEFINE PRIMARY 1 #DEFINE CARBON_COPY 2 #DEFINE BLIND_CARBON_COPY 3 LOCAL loSession, loMessages, lnAttachments, loError AS EXCEPTION, loErrorSend AS EXCEPTION tcReturn = "" TRY loSession = CREATEOBJECT( "MSMAPI.MAPISession" ) IF TYPE("tcUserName") = "C" loSession.UserName = tcUserName ENDIF IF TYPE("tcPassword") = "C" loSession.PASSWORD = tcPassword ENDIF loSession.Signon() IF (loSession.SessionID > 0) loMessages = CREATEOBJECT( "MSMAPI.MAPIMessages" ) loMessages.SessionID = loSession.SessionID ENDIF WITH loMessages .Compose() .RecipDisplayName = tcTo .RecipType = PRIMARY .ResolveName() IF TYPE("tcCC") = "C" .RecipIndex = .RecipCount .RecipDisplayName = tcCC .RecipType = CARBON_COPY .ResolveName() ENDIF IF TYPE("tcBCC") = "C" .RecipIndex = .RecipCount .RecipDisplayName = tcBCC .RecipType = BLIND_CARBON_COPY .ResolveName() ENDIF .MsgSubject = tcSubject .MsgNoteText = tcBody IF TYPE("taFiles", 1) = "A" lnAttachments = ALEN(taFiles) IF LEN(tcBody) < lnAttachments && Se asegura que el cuerpo es suficientemente grande para los adjuntos tcBody = PADR(tcBody, lnAttachments, " ") ENDIF FOR lnCountAttachments = 1 TO lnAttachments .AttachmentIndex = .AttachmentCount .AttachmentPosition = .AttachmentIndex .AttachmentName = JUSTFNAME(taFiles(lnCountAttachments)) .AttachmentPathName = taFiles(lnCountAttachments) ENDFOR ENDIF TRY .SEND(tlOpenEmail) CATCH TO loErrorSend IF tlOpenEmail && El usuario canceló la operación desde su cliente de correo? tcReturn = "El usuario canceló el envío de correo." ELSE THROW loErrorSend ENDIF ENDTRY ENDWITH loSession.Signoff() CATCH TO loError tcReturn = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ; [LineNo: ] + STR(loError.LINENO) + CHR(13) + ; [Message: ] + loError.MESSAGE + CHR(13) + ; [Procedure: ] + loError.PROCEDURE + CHR(13) + ; [Details: ] + loError.DETAILS + CHR(13) + ; [StackLevel: ] + STR(loError.STACKLEVEL) + CHR(13) + ; [LineContents: ] + loError.LINECONTENTS FINALLY STORE .NULL. TO loSession, loMessages RELEASE loSession, loMessages ENDTRY ENDPROC
UNA CONSULTA, PARA ENVIARLO SIN AUTENTICARME, SIN ESPERAR UNA RESPUESTA DEL SERVIDOR DE CORREOS, COMO SE HACE?, NO HAY UNA PROPIEDAD DONDE ME DIGA loSesion.Authentication= 0
ResponderBorrar