|
This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. -- Okay. I tried sending them as text files but they were too big together. I will try sending one at a time. <<SNDSMTP.TXT>> Albert -----Original Message----- From: Brad McDaniel [SMTP:BMCDANIEL@ABSBC.ORG] Sent: Friday, September 14, 2001 11:06 AM To: 'midrange-l@midrange.com' Subject: RE: using TELNET (in batch mode) to send e-mail This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. -- [ Picked text/plain from multipart/alternative ] Can you send the attachment in another form besides .zip? My email filter deletes .zip files. Thanks, Brad -----Original Message----- From: York, Albert [mailto:albert.york@nissan-usa.com] Sent: Friday, September 14, 2001 12:56 PM To: 'MIDRANGE-L@midrange.com' Subject: FW: using TELNET (in batch mode) to send e-mail This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. -- I have attached a couple of source files which I developed to send and receive SMTP email. Even if they are too specific to use as is, they will demonstrate the principals and can be easily modified. Albert York <<email.zip>> -- [ email.zip of type application/octet-stream deleted ] _______________________________________________ This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list To post a message email: MIDRANGE-L@midrange.com To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/cgi-bin/listinfo/midrange-l or email: MIDRANGE-L-request@midrange.com Before posting, please take a moment to review the archives at http://archive.midrange.com/midrange-l. _______________________________________________ This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list To post a message email: MIDRANGE-L@midrange.com To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/cgi-bin/listinfo/midrange-l or email: MIDRANGE-L-request@midrange.com Before posting, please take a moment to review the archives at http://archive.midrange.com/midrange-l. -- * SNDSMTP * Send email using SMTP * * To compile: CRTBNDRPG DFTACTGRP(*NO) BNDDIR(QC2LE) * FMaillog o e disk Fqatmsmtpa if e k disk usropn D AF_INET C Const(2) D SOCK_STREAM C Const(1) D FIONBIO c const(131074) D Non_Block_IO s 10i 0 inz(1) D Unused s 10i 0 INZ(0) D SvrAddrLen S 10u 0 INZ(0) D SocketID S 10i 0 INZ(0) D rc S 10i 0 INZ(0) D p s 10i 0 D Size s 10i 0 D XLateTable S 10A D XLateTblLib S 10A D XlateLen s 5P 0 D ReadBuff s 255 D RecvCnt S 10i 0 D ReadLim s 3P 0 inz(255) D Timeout s 10u 0 inz(10000000) D TenthSecond s 10u 0 inz(10000) D result s 10i 0 D MicroSec s 10i 0 D RecvBuff s 1000 D SendLen S 10i 0 D ReadCnt s 10i 0 D WaitCode s 3 D Time1 s z D Time2 s z D SendBuff s 1024 D WaitForData s 1n inz('0') D ServerParm s 25 inz('EXCHANGE') D Server s * inz D hostent_dataP s * inz D hostp s * inz D char s 1 D MsgBuff s 32000 D Message s 16000 D Namefield s 64 D Addressto s 256 D command s 4 D DayOfTheWeek s 4 D DayName s 3 D MonthName s 3 D MonthArr s 3 dim(12) CTDATA perrcd(12) D TimeStamp s 64 D SocketAddr DS D SAFamilty 5u 0 D SAData 14a D SvrAddress DS D Svrfamily 5i 0 D Svrport 5u 0 D Svraddr 10u 0 D SvrNull 8a D hostent ds align based(hostP) D h_namePtr * D h_aliasesPtr * D h_addrType 10i 0 D h_length 10i 0 D h_addrListPtr * D Hostent_data ds align based(Hostent_dataP) D h_name 256a D h_aliasesArrp * dim(65) D h_aliasesArr 256a dim(64) D H_addrArrp * dim(101) D h_addrArr 10u 0 dim(100) D open_Flag 10i 0 D F0 * D Filep0 260a D reserved_0 150a D f1 * D filep1 260a D reserved_1 150a D f2 * D filep2 260a D reserved_2 150a * Socket prototypes D GetHostId PR 10u 0 ExtProc('gethostid') D Socket PR 10i 0 ExtProc('socket') D 10i 0 Value D 10i 0 Value D 10i 0 Value D Read PR 10i 0 ExtProc('read') D 10i 0 Value D * Value D 10i 0 Value D Write PR 10i 0 ExtProc('write') D 10i 0 Value D * Value D 10i 0 Value D Connect PR 10i 0 ExtProc('connect') D 10i 0 Value D * Value D 10u 0 Value D Close PR 10i 0 ExtProc('close') D 10i 0 Value D gethostbyname PR * ExtProc('gethostbyname') D * Value D ioctl PR 10i 0 ExtProc('ioctl') D 10i 0 value D 10i 0 value D 10i 0 D delay PR 10I 0 ExtProc('usleep') D DelayTime 10U 0 value D ds D CurrTime 1 14 0 D Hour 1 2 D Minute 3 4 D Seconds 5 6 D Month 7 8 0 D Day 9 10 D Year 11 14 D SplChr C Const(',;:') D Blanks C Const(' ') C *entry plist C parm UserID 8 C parm Address 8 C parm ToAddr 256 C parm FromAddr 256 C parm FromName 256 C parm SubJect 64 C parm Message1 8000 C parm Message2 8000 C parm DayOfTheWeek C parm ReturnMsg 70 C exsr SktConnect C eval sendbuff = 'HELO' C exsr WriteData C eval command = 'HELO' C eval WaitCode = '250' C exsr WaitForCode C eval sendbuff = 'MAIL FROM:<' C eval SendBuff = %trim(SendBuff) + FromAddr C eval SendBuff = %trim(SendBuff) + '>' C exsr WriteData C eval command = 'MAIL' C eval WaitCode = '250' C exsr WaitForCode C exsr GetAddress C eval sendbuff = 'RCPT TO:<' C eval SendBuff = %trim(SendBuff) + AddressTo C eval SendBuff = %trim(SendBuff) + '>' C exsr WriteData C eval command = 'RCPT' C eval WaitCode = '250' C exsr WaitForCode C eval sendbuff = 'DATA' C exsr WriteData C eval command = 'DATA' C eval WaitCode = '354' C exsr WaitForCode C movel FromName NameField C SplChr:Blanks xlate NameField NameField C eval sendbuff = 'FROM:' C eval SendBuff = %trim(SendBuff) + NameField C eval SendBuff = %trim(Sendbuff) + ' <' + FromAddr C eval SendBuff = %trim(Sendbuff) + '>' C exsr WriteData C eval sendbuff = 'TO:' C eval SendBuff = %trim(SendBuff) + AddressTo C exsr WriteData C eval sendbuff = 'SUBJECT:' C eval SendBuff = %trim(SendBuff) + Subject C exsr WriteData C time CurrTime C eval DayName = %subst(DayOfTheWeek:2:3) C eval MonthName = MonthArr(Month) C movel DayName TimeStamp C TimeStamp cat ',':0 TimeStamp C TimeStamp cat MonthName:1 TimeStamp C TimeStamp cat Day:1 TimeStamp C TimeStamp cat Year:1 TimeStamp C TimeStamp cat Hour:1 TimeStamp C TimeStamp cat ':':0 TimeStamp C TimeStamp cat Minute:0 TimeStamp C TimeStamp cat ':':0 TimeStamp C TimeStamp cat Seconds:0 TimeStamp C TimeStamp cat '-0700':1 TimeStamp C 'Date:' cat TimeStamp:1 SendBuff C exsr WriteData C exsr WriteData C exsr writeMsg C exsr WriteData C eval sendbuff = '.' C exsr WriteData C eval command = 'EOD ' C eval WaitCode = '250' C exsr WaitForCode C eval sendbuff = 'QUIT' C exsr WriteData C eval command = 'QUIT' C eval WaitCode = '221' C exsr WaitForCode C movel Addressto LTOADDR C movel FROMADDR LFROMADDR C movel FROMNAME LFROMNAME C movel SUBJECT LSUBJECT C movel TimeStamp LDATESENT C movel MESSAGE LMESSAGE C write MAILLOGR C exsr eoj ********************************************************************** C Getaddress begsr C movel ToAddr AddressTo C Userid ifne *blanks C open qatmsmtpa C smtpkey klist C kfld Userid C kfld address C smtpkey chain qatmsmtpa 44 C *in44 ifne *on C move *blanks addressto C smtpuid cat '@':0 Addressto C addressto cat domroute:0 Addressto C endif C close qatmsmtpa C endif C endsr ********************************************************************** * Write data to the socket C WriteData begsr * Find the length if not specified C SendBuff ifne *blanks C ' ' checkr SendBuff:256 SendLen * Convert to ASCII C CALL 'QDCXLATE' 68 C PARM SendLen XlateLen C PARM SendBuff C PARM 'QASCII' XLateTable C PARM 'QSYS' XLateTblLib C else C move *zeros SendLen C endif * Append CR and LF C add 1 SendLen C eval %subst(SendBuff:SendLen:1) = x'0D' C add 1 SendLen C eval %subst(SendBuff:SendLen:1) = x'0A' * Write to the socket C eval rc = Write(SocketID:%addr(SendBuff):SendLen) C move *blanks SendBuff C move *zeros SendLen C endsr ********************************************************************** C WriteMsg begsr C movel Message1 Message C move Message2 Message C eval MsgBuff = %trim(Message) + '|' C ' ' checkr MsgBuff:16000 MsgLen 5 0 C do MsgLen MsgPtr 5 0 C C eval char = %subst(MsgBuff:MsgPtr:1) C char ifeq '|' C SendBuff ifeq '. ' C movel '..' Sendbuff C endif C exsr WriteData C iter C endif C add 1 SendLen C eval %subst(SendBuff:SendLen:1) = char C SendLen ifge 1000 C exsr WriteData C endif C enddo C endsr ********************************************************************** C WaitForCode begsr C exsr ReadData C WaitCode scan RecvBuff 20 C *in20 ifne *on C command cat RecvBuff:1 ReturnMsg C exsr EOJ C endif C endsr ********************************************************************** C ReadData begsr C move *blanks RecvBuff C move *zeros RecvCnt C time Time1 C *on doweq *on * Read data from the socket C move *blanks ReadBuff C eval ReadCnt = C Read(SocketID:%addr(ReadBuff):ReadLim) C move *off *in10 * Have received data C ReadCnt ifgt 0 C x'0D' scan ReadBuff 10 * Convert to EBCDIC C CALL 'QDCXLATE' 68 C PARM ReadCnt XlateLen C PARM ReadBuff C PARM 'QEBCDIC' XLateTable C PARM 'QSYS' XLateTblLib * Add to receive buffer C eval %subst(RecvBuff:RecvCnt+1:ReadCnt) = ReadBuff C eval RecvCnt = RecvCnt + ReadCnt C *in10 ifeq *on C leave C endif * Get next buffer C iter C endif * No data in the read buffer * Check for timeout C time Time2 C Time2 subdur Time1 MicroSec:*ms C MicroSec ifgt Timeout C leave C endif * Wait a tenth of a second before trying again C eval result = delay(TenthSecond) C enddo C endsr ********************************************************************** * Connect to the telnet server on the AS/400 C SktConnect begsr * Set socket attributes C eval SocketID = Socket(AF_INET:SOCK_STREAM:UNUSED) C SocketID iflt 0 C exsr Eoj C ENDIF C eval serverparm = %trim(serverparm) + x'00' C eval server = %addr(serverparm) C eval hostp = gethostbyname(server) C eval hostent_dataP = h_namePtr C eval svrAddr = h_addrArr(1) C eval Svrfamily = AF_INET C eval Svrport = 25 C eval SvrNull = X'0000000000000000' C eval SvrAddrLen= %Size(SvrAddress) C eval rc = Connect(SocketID:%addr(SvrAddress): C SvrAddrLen) C rc iflt 0 C exsr Eoj C endif * Set the socket for non-blocking I/O C eval rc = ioctl(SocketID:FIONBIO:Non_Block_IO) C rc iflt 0 C exsr Eoj C ENDIF C exsr WaitForCode C endsr ********************************************************************** * End of job C Eoj begsr C eval rc = close(SocketID) C eval *INLR = *ON C return C endsr C********************************************************************* ** JanFebMarAprMayJunJulAugSepOctNovDec
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.