JAMES-4030 Carry over RRT forwardToRemoteAddress exceptions

Could lead to mail loss...
diff --git a/server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java b/server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
index 232c994..416555e 100644
--- a/server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
+++ b/server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
@@ -377,7 +377,8 @@
 
     @Override
     public void sendMail(Mail mail) throws MessagingException {
-        sendMail(mail, Optional.ofNullable(mail.getState()).orElse(Mail.DEFAULT));
+        String state = Optional.ofNullable(mail.getState()).orElse(Mail.DEFAULT);
+        sendMail(mail, state);
     }
 
     @Override
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
index c580513..b51300c 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
@@ -42,7 +42,6 @@
 import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.james.rrt.api.RecipientRewriteTable;
-import org.apache.james.rrt.api.RecipientRewriteTable.ErrorMappingException;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.apache.james.rrt.lib.Mapping;
 import org.apache.james.rrt.lib.MappingSource;
@@ -415,14 +414,14 @@
                 return new Decision(recipient, RrtExecutionResult.success(newMailAddresses));
             }
             return new Decision(recipient, RrtExecutionResult.success(recipient));
-        } catch (ErrorMappingException | RecipientRewriteTableException e) {
+        } catch (Exception e) {
             LOGGER.warn("Could not rewrite recipient {}", recipient, e);
             return new Decision(recipient, RrtExecutionResult.error(recipient));
         }
     }
 
     @VisibleForTesting
-    List<MailAddress> handleMappings(Mappings mappings, Mail mail, MailAddress recipient) {
+    List<MailAddress> handleMappings(Mappings mappings, Mail mail, MailAddress recipient) throws MessagingException {
         boolean isLocal = true;
         Map<Boolean, List<MailAddress>> mailAddressSplit = splitRemoteMailAddresses(mappings);
 
@@ -456,7 +455,7 @@
             .stream();
     }
 
-    private void forwardToRemoteAddress(Mail mail, MailAddress recipient, Collection<MailAddress> remoteRecipients) {
+    private void forwardToRemoteAddress(Mail mail, MailAddress recipient, Collection<MailAddress> remoteRecipients) throws MessagingException {
         if (!remoteRecipients.isEmpty()) {
             Mail duplicate = null;
             try {
@@ -464,8 +463,6 @@
                 duplicate.setRecipients(ImmutableList.copyOf(remoteRecipients));
                 mailetContext.sendMail(duplicate);
                 LOGGER.info("Mail for {} forwarded to {}", recipient, remoteRecipients);
-            } catch (MessagingException ex) {
-                LOGGER.warn("Error forwarding mail to {}", remoteRecipients);
             } finally {
                 LifecycleUtil.dispose(duplicate);
             }