LISTSERV at Work
Tweet This
LISTSERV Tech Tip

Q: Why do email lists sometimes become held and how can I troubleshoot this?

If an error occurs when LISTSERV tries to process a message sent to a mailing list, then the list becomes held. This can also happen if too many messages are posted to a list in a single day. In these cases, LISTSERV stops processing further mail sent to the list to give the list owner or site administrator a chance to resolve the problem. After the error is fixed, the list owner or site administrator can free the mailing list, and any messages sent to it since it became held will then be reprocessed.

When a list becomes held, usually two error notifications are sent out via email. The first notifications goes to the person who sent the message that caused the list to become held and looks like this:

The distribution of your message dated Wed, 2 Sep 2020 14:42:57 -0700 with subject "Today's Message" has been postponed because the LISTNAME list is held. No action is required from you. Your message will be reprocessed automatically once the list owner releases the list.

The other error notification goes to the list owners and usually contains an error traceback or other useful information indicating why the mailing list became held. Here are some common examples why a list can become held.

Daily Threshold Exceeded

The simplest situation is the one where the error message looks like this:

Daily message threshold (50) exceeded for the LISTNAME list. The list has been held and will stop processing messages until a "FREE LISTNAME" command is received from you. You can change the daily message threshold by adding a "Daily-Threshold= nnn" keyword to the list header.

Every mailing list has a limit on how many messages can be posted to it each day. By default, this limit is 50 messages per day. If this limit is exceeded, then the mailing list is held and the above message is sent to the list owners.

In this situation, check the mailing list's archives or changelog (if it has one) to make sure that the 50 messages posted that day are legitimate. It may be that a broken mailer has been sending a bunch of out-of-office messages to the list, or a spammer has been sending lots of messages to it, or simply that a heated discussion has arisen and people need some time to cool off. In those cases, you may not want to free the mailing list immediately.

If all of the messages seem legitimate, then you can free the list by going to "LISTSERV Command" under the "List Management" menu in the LISTSERV web interface and issuing the command FREE, followed by the name of the list. Only a list owner or site administrator can issue this command.

Once the mailing list is freed, all messages that have been posted to it since it became held will be reprocessed. If this causes the message to exceed the daily threshold again, then the mailing list will become held again and will stay that way until a list owner frees it. There is no limit on the number of times a mailing list can be freed in a given day.

If a mailing list gets enough legitimate traffic that it becomes held regularly, then it might make sense to increase the Daily-Threshold setting. For instance, setting "Daily-Threshold= 100" in a list's configuration means that 100 messages per day will now be allowed before the list becomes held.

Non-Existent Archive Locations

Another error notification that a list owner might see looks like this:

An error occurred while logging mail to the archives of the LISTNAME list. An incomplete copy of the message might be present in the archive file. The list is being held to prevent further occurrences of this error. Please take corrective action and issue a "FREE LISTNAME" command when you want the message to be reprocessed.

Serious error occurred - traceback follows
------------------------------------------
>>> Error X'00000011' opening file
>>> C:\LISTSRV\LISTS\LISTNAME\LISTNAME.LOG2010 <<<
 -> Severity: Warning
 -> Facility: Generic error codes
 -> Abstract: File/major entity not found
 -> I/O mode: Record write
>>> Error X'00000011' logging message to archives <<<
 -> Severity: Warning
 -> Facility: Generic error codes
 -> Abstract: File/major entity not found

The important information here is in the "Serious error occurred – traceback follows" section of the message. In the above case, the error is "File/major entity not found", which means that the mailing list's "Notebook=" keyword points to a location that doesn't exist, in this case C:\LISTSRV\LISTS\LISTNAME.

This might happen if a mailing list is created without archives and the decision is subsequently made to enable them. Administrators might assume that if they change "Notebook= No" to something like "Notebook= Yes,C:\LISTSERV\LISTS\LISTNAME\,Monthly,Public", then LISTSERV will automatically create the C:\LISTSERV\LISTS\LISTNAME directory. However, LISTSERV doesn't do this. The directory must be created manually.

LISTSERV will create a directory when a mailing list is first created, but there is an important restriction on this. If a mailing list is created with "Notebook= Yes,C:\LISTSERV\LISTS\LISTNAME\,Monthly,Public" and C:\LISTSERV\LISTS exists but the LISTNAME subdirectory doesn't, then the subdirectory will be created. However, if C:\LISTSERV\LISTS doesn't already exist, then LISTSERV won't create the directory. Usually all the archives are stored in the same top-level location, so this isn't a problem. However, you may see this error if an incorrect drive letter is specified, or if there's a typo in the directory name.

Whatever the situation, you either have to create the directory that the "Notebook=" setting is pointing to, or you have to change the "Notebook=" setting so that it points to a directory that does exist. After taking either of these corrective actions, you should be able to free the mailing list successfully as described above.

Archive/Digest Mismatches

The third type of error message that a list owner is likely to see looks like this:

An error occurred while logging mail to the archives of the LISTNAME list. An incomplete copy of the message might be present in the archive file. The list is being held to prevent further occurrences of this error. Please take corrective action and issue a "FREE LISTNAME" command when you want the message to be reprocessed.

Serious error occurred - traceback follows
------------------------------------------
>>> Error X'00000009' logging message to archives <<<
-> Severity: Warning
-> Facility: Generic error codes
-> Abstract: End of file

If a mailing list has archives and a digest available at the time when LISTSERV distributes a message, it will automatically check to make sure that the messages in the digest match up with what's in the archives. If they don't match up, then the above error is generated, and the mailing list is put on hold. This usually occurs if the current day's archives have been modified in some way, for example by deleting a message from them.

Fixing this requires you to reset the digest, which you can do by updating the list configuration with "Digest= No" and then changing back to the old configuration. This deletes the current digest and tells LISTSERV to start a new one. You can then free the mailing list using the FREE LISTNAME command.

Manually Placing a Mailing List on Hold

In rare circumstances, it may make sense to manually put a mailing list on hold. Perhaps some maintenance is being done on the server, and you don't want messages to be distributed to the mailing list while that's in progress. In these types of cases, you can put the mailing list on hold by issuing a HOLD command, followed by the list name. The mailing list will remain held until you free it by issuing the FREE command. All messages sent to the mailing list since it became held will be released when you free the list.

Other Questions About Held Lists

1. Is there a command to see which mailing lists on my LISTSERV installation are held?

Yes, if you issue a LISTS command through the command interface, then LISTSERV will respond with a list of all mailing lists on the server. If any are held, they will have a note under them indicating so.


2. I freed the mailing list, and LISTSERV said it was successful, but none of the subscribers got any of the freed messages, and the mailing list seems to be held again. Why?

Freeing a mailing list tells LISTSERV to reprocess any messages that were sent to the list since it became held. However, if the problem that caused the mailing list to become held in the first place is unresolved or a new problem prevents messages from being processed normally, then the mailing list will immediately be placed on hold again.

If this occurs, then a new message will be sent to the list owner about it, and you can use the same troubleshooting procedure described above to diagnose it. You can also write to L-Soft Technical Support for assistance if you can't understand what's wrong.


3. My mailing list is held, but I can't find the message sent to the list owner about it. What should I do?

Typically, in this situation, you can try freeing the list, then issuing a LISTS command as described above to see if the mailing list has become held again. If whatever caused the hold on the mailing list is no longer a problem, then the mailing list will no longer be held. If the problem is unresolved, then the mailing list will become held again, and a new message will be sent to the list owner about it, at which point you can troubleshoot the problem as described above.

If you are a site administrator but not a list owner for the mailing list, and therefore aren't receiving the error notifications that the list owners get, then you can temporarily add yourself as a list owner and free the list. Then you should start receiving updates on any error that occur as a result of freeing the list. Once you have successfully resolved the problem, you can remove yourself as a list owner.


4. I want to free my mailing list, but I don't want the held messages to be distributed. What should I do?

One approach to this is to temporarily change the list's "Send=" setting to, for example, "Send= Owner,Confirm" or "Send= badaddress@yourdomain.com,Confirm" and then free the mailing list. Messages that aren't from the specified addresses will then be automatically rejected. You can then change the "Send=" setting back to what it was originally. Note that if you take this approach, rejection messages will be sent to the senders of the original messages.

If you have access to the server that LISTSERV is installed on, then there's another option. In the listserv\spool\ (under Windows) or ~listserv/spool/ directory (under Unix), you should see one or more .jobh files that include the name of the mailing list. For example:

10/21/2020  09:44 PM             1,224 0044_6_TESTLIST.JOBH
10/21/2020  09:45 PM             1,227 0046_6_TESTLIST.JOBH
10/21/2020  09:45 PM             2,974 0048_6_TESTLIST.JOBH

You may also see .job, .error, or other files, but those files are not relevant to the issue at hand.

If you don't want any of the held messages to be distributed to the mailing list, then you can just delete all of the .jobh files for the list. If you want to get rid of files older than a certain date before freeing the mailing list, then you can do that too.

If there are specific messages that you want to intercept before freeing the list, then you can use the "jobview" command-line executable that should also be in the spool directory to view the contents of the .jobh files. You can also capture the contents of the jobh file to a text file. For instance, the jobview 0044_6_testlist.jobh > output.txt command will store the contents of the 0044_6_testlist.jobh job in a file named "output.txt".

Once you've removed whatever .jobh files you no longer want, you can free the mailing list. It isn't necessary to restart LISTSERV.


5. I see that a mailing list is held and would like to find out why, but I can't find any errors related to it. How can I investigate further?

Before freeing the mailing list, look in the listserv\spool\ or ~listserv/spool/ directory and find the oldest .jobh file related to the list. This is either the message that resulted in the hold on the mailing list, or it's the first message posted to the mailing list after it became held.

If you look at the creation date and time of the .jobh file in question and then look at the corresponding date and time in the LISTSERV log file, then you will hopefully find additional information about what caused the mailing list to become held.

If you are unable to find the relevant part of the log file, then send a copy of the .jobh file and the corresponding LISTSERV log file to L-Soft Support, and we will have a look.

Next Steps


© L-Soft 2020. All Rights Reserved.




Powered by LISTSERV Maestro