I localized the last crash to this subroutine. d(34) printed 34 in the debug file, but the $m never appeared on the console, nor in the DEBUG log file (which is unbuffered), neither in the LOG file.
This means the program crashed inside localtime(), or doing a s/// regexp replace, or concatenating to a string ($m). The $_[0] parameter that was passed in was a string constant: 'local or whitelisted', and was called this way:
And you stopped localizing the error because ...?
print DEBUG "Line ", __LINE__, "\n"; before each line at the very least.
You can also
print DEBUG "\$fh = $fh\n";
print DEBUG "\$Con{\$fh} = $Con{$fh}\n";
print DEBUG "\$Con{\$fh}->{ip} = $Con{$fh}->{ip}\n";
print DEBUG "\$Con{\$fh}->{mailfrom} = $Con{$fh}->{mailfrom}\n";