In v7, I simply created a scheduled task that performs the resend functionality because of this issue. Any client that needed to make heavy use of the email queue, I did this for. Below is the code, very simple and works every time.
protected void ResendFailedEmails(ref string result)
{
try
{
if (!EmailHelper.Queue.SendingInProgess)
{
EmailHelper.Queue.SendAllFailed();
result = "Completed successfully.";
}
else
{
result = "Send already in progress.";
}
}
catch (Exception ex)
{
result = ex.Message;
}
}