Troubleshooting
Problem
This procedure deletes all SNADS distributions on the system for each user. The distribution limit is 9999 and CPD90B1 will be issued if this has been reached.
Resolving The Problem
This program will submit three jobs for each user in the directory: Delete all mail inbound, delete all mail outbound, and delete all mail that is in error. There are four programs. The Cleanmail program calls the other three programs. It is important to have the library these are created in to be in the *LIBL both for the system, by WRKSYSVAL and also ADDLIBLE command. You will be able to run all three by calling the first program (Cleanmail).
The Cleanmail program displays the directory entry to an output file. Then the Cleanmail program calls each program and reads through the output file so that each program is run for each user in the list.
The Mailin program uses QRYDST to see how much inbound mail the user has and then DLTDST to delete mail for each user in the system directory.
The Mailout program does the same, except it deletes all outbound mail for each user in the system directory.
The Mailer program deletes all mail that is in error for each user in the system directory. If you wish to get rid of mail for users that no longer exist, you should contact IBM Support.
The programs will not remove any mail for any of the IBM-supplied Q profiles due to a restriction on the SBMJOB command. To delete this mail, call the three programs interactively after using the GRTUSRPMN command to grant authority to the person who is invoking the program.
Restrictions:
- This program below requires the caller to have *ALLOBJ authority when security level is 30 or higher
- This program does not touch "Q" users (i.e. QSECOFR, QPGM, etc.)
Cleanmail
PGM
DCLF FILE(QSYS/QAOSDIRX) RCDFMT(OSDIRX)
DSPDIRE OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPDIRE) +
DETAIL(*FULL) OUTFILFMT(*TYPE3) OUTDTA(*ALL)
OVRDBF FILE(QAOSDIRX) TOFILE(QTEMP/DSPDIRE)
DLTF FILE(QGPL/ALLMAILIN)
MONMSG MSGID(CPF0000)
DLTF FILE(QGPL/ALLMAILOUT)
MONMSG MSGID(CPF0000)
LOOP: RCVF RCDFMT(OSDIRX)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(DONE))
IF COND(&DXUSRP *NE ' ') THEN(+
DO)
SBMJOB CMD(CALL PGM(MAILIN)) JOB(&DXUSRP) +
JOBQ(*LIBL/QBATCH) USER(&DXUSRP) +
SYSLIBL(*SYSVAL) CURLIB(*CRTDFT) +
INLLIBL(*SYSVAL) LOGCLPGM(*YES) HOLD(*NO)
MONMSG MSGID(CPF0000)
SBMJOB CMD(CALL PGM(MAILOUT)) JOB(&DXUSRP) +
JOBQ(*LIBL/QBATCH) USER(&DXUSRP) +
SYSLIBL(*SYSVAL) CURLIB(*CRTDFT) +
INLLIBL(*SYSVAL) LOGCLPGM(*YES) HOLD(*NO)
MONMSG MSGID(CPF0000)
SBMJOB CMD(CALL PGM(MAILERR)) JOB(&DXUSRP) +
JOBQ(*LIBL/QBATCH) USER(&DXUSRP) +
SYSLIBL(*SYSVAL) CURLIB(*CRTDFT) +
INLLIBL(*SYSVAL) LOGCLPGM(*YES) HOLD(*NO)
MONMSG MSGID(CPF0000)
ENDDO
GOTO LOOP
DONE: ENDPGM
Mailin
PGM
DCL VAR(&MM) TYPE(*CHAR) LEN(2)
DCL VAR(&DD) TYPE(*CHAR) LEN(2)
DCL VAR(&YY) TYPE(*CHAR) LEN(4)
DCL VAR(&DATE) TYPE(*CHAR) LEN(8) +
VALUE('07042076') /* DELETE ALL ENTRIES +
EARLIER THAN JULY 4, 2076 */
DCL VAR(&DLTDATE) TYPE(*CHAR) LEN(8)
DCL VAR(&MAILDATE) TYPE(*CHAR) LEN(8)
DCLF FILE(QSYS/QAOSILIN) RCDFMT(OSLIN)
QRYDST OPTION(*IN) USRID(*CURRENT) OUTFILE(QTEMP/IN)
OVRDBF FILE(QAOSILIN) TOFILE(QTEMP/IN)
LOOP: RCVF RCDFMT(OSLIN)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(DONE))
CHGVAR VAR(&MM) VALUE(%SST(&DATE 1 2))
CHGVAR VAR(&DD) VALUE(%SST(&DATE 3 2))
CHGVAR VAR(&YY) VALUE(%SST(&DATE 5 4))
CHGVAR VAR(&DLTDATE) VALUE(&YY *CAT &MM *CAT &DD)
CHGVAR VAR(&MAILDATE) VALUE(%SST(&LINSDT 1 8))
IF COND(&MAILDATE *LE &DLTDATE) THEN(+
DO)
DLTDST DSTID(&LINDID) OPTION(*IN) USRID(*CURRENT) +
DSTIDEXN(&LINDEX) OBJ(*ALL)
MONMSG MSGID(CPF0000)
ENDDO
GOTO LOOP
DONE: ENDPGM
Mailout
PGM
DCL VAR(&MM) TYPE(*CHAR) LEN(2)
DCL VAR(&DD) TYPE(*CHAR) LEN(2)
DCL VAR(&YY) TYPE(*CHAR) LEN(4)
DCL VAR(&DATE) TYPE(*CHAR) LEN(8) +
VALUE('07042076') /* DELETE ALL ENTRIES +
EARLIER THAN JULY 4, 2076 */
DCL VAR(&DLTDATE) TYPE(*CHAR) LEN(8)
DCL VAR(&MAILDATE) TYPE(*CHAR) LEN(8)
DCLF FILE(QSYS/QAOSILOT) RCDFMT(OSLOUT)
QRYDST OPTION(*OUT) USRID(*CURRENT) OUTFILE(QTEMP/OUT)
OVRDBF FILE(QAOSILOT) TOFILE(QTEMP/OUT)
LOOP: RCVF RCDFMT(OSLOUT)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(DONE))
CHGVAR VAR(&MM) VALUE(%SST(&DATE 1 2))
CHGVAR VAR(&DD) VALUE(%SST(&DATE 3 2))
CHGVAR VAR(&YY) VALUE(%SST(&DATE 5 4))
CHGVAR VAR(&DLTDATE) VALUE(&YY *CAT &MM *CAT &DD)
CHGVAR VAR(&MAILDATE) VALUE(%SST(&OUTSDT 1 8))
IF COND(&MAILDATE *LE &DLTDATE) THEN(+
DO)
DLTDST DSTID(&OUTDID) OPTION(*OUT) USRID(*CURRENT) +
DSTIDEXN(&OUTDEX) OBJ(*ALL)
MONMSG MSGID(CPF0000)
ENDDO
GOTO LOOP
DONE: ENDPGM
Mailerr
PGM
DCL VAR(&MM) TYPE(*CHAR) LEN(2)
DCL VAR(&DD) TYPE(*CHAR) LEN(2)
DCL VAR(&YY) TYPE(*CHAR) LEN(4)
DCL VAR(&DATE) TYPE(*CHAR) LEN(8) +
VALUE('07042076') /* DELETE ALL ENTRIES +
EARLIER THAN JULY 4, 2076 */
DCL VAR(&DLTDATE) TYPE(*CHAR) LEN(8)
DCL VAR(&MAILDATE) TYPE(*CHAR) LEN(8)
DCLF FILE(QSYS/QAOSILOT) RCDFMT(OSLOUT)
QRYDST OPTION(*OUT) USRID(*CURRENT) OUTFILE(QTEMP/OUT)
OVRDBF FILE(QAOSILOT) TOFILE(QTEMP/OUT)
LOOP: RCVF RCDFMT(OSLOUT)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(DONE))
CHGVAR VAR(&MM) VALUE(%SST(&DATE 1 2))
CHGVAR VAR(&DD) VALUE(%SST(&DATE 3 2))
CHGVAR VAR(&YY) VALUE(%SST(&DATE 5 4))
CHGVAR VAR(&DLTDATE) VALUE(&YY *CAT &MM *CAT &DD)
CHGVAR VAR(&MAILDATE) VALUE(%SST(&OUTSDT 1 8))
IF COND(&MAILDATE *LE &DLTDATE) THEN(+
DO)
DLTDST DSTID(&OUTDID) OPTION(*ERR) USRID(*CURRENT) +
DSTIDEXN(&OUTDEX) OBJ(*ALL)
MONMSG MSGID(CPF0000)
ENDDO
GOTO LOOP
DONE: ENDPGM
NOTE: The above program has now been incorporated into a command in our QMGTOOLS utility. To download/install QMGTOOLS please refer to the following document:
If QMGTOOLS is already on the system do the following to make sure it is updated:
1) Issue the following CL commands on the IBM i command line:
- ADDLIBLE QMGTOOLS
- GO MG
2) Take an opt. 13 to check for an update and allow the tool to install the updates if a later version is found.
Once QMGTOOLS is installed/updated the following command can be used:
QMGTOOLS/CLEANMAIL
You can prompt on the command to specify either *ALL for all users or specify a specific user profile.
Historical Number
28180327
Was this topic helpful?
Document Information
Modified date:
18 December 2019
UID
nas8N1016831