IBM Support

Example CLEANMAIL Mail Clean-Up program for cleaning out distributions for all users (not "Q" users) on the System

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.

[{"Type":"MASTER","Line of Business":{"code":"LOB57","label":"Power"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"Platform":[{"code":"PF012","label":"IBM i"}],"Version":"6.1.0"}]

Historical Number

28180327

Document Information

Modified date:
18 December 2019

UID

nas8N1016831