Some users are experiencing issues where despite having a connection timeout and timeout set, a socket will be hung up at socket.connect or socket.read. The problem is that the ehcache annotations wrap the cache with a blocking cache. This causes all future threads for the same cache key to be blocked, causing threads to hang (cascading effect) eventually causing the portlet to not execute ANY email preview portlet threads due to too many hung worker threads.
Remove the cache annotations and instead calculate the key and manage the cache similar to the way the CalendarPortlet does using a non-blocking cache so you don't get a cascading effect of one thread causing multiple future threads (probably the same user logging on another time) to cause subsequent threads to block and hang.
See attached stack trace and related linked issues.