code: protected void retryableSend(Postcard postcard, SMailPostingMessage message) {
          final int retryCount = getRetryCount(postcard); // not negative, zero means no retry
          final long intervalMillis = getIntervalMillis(postcard); // not negative
          int challengeCount = 0;
          Exception firstCause = null;
          while (true) {
              if (challengeCount > retryCount) { // over retry limit, cannot send
                  if (firstCause != null) { // just in case
                      handleSendFailure(postcard, message, firstCause);
                  }
                  break;
              }
              try {
                  if (challengeCount > 0) { // means retry sending
                      waitBeforeRetrySending(intervalMillis);
                  }
                  stagingSend(postcard, message);
                  if (challengeCount > 0) { // means retry success
                      logRetrySuccess(postcard, message, challengeCount, firstCause);
                  }
                  break;
              } catch (RuntimeException | MessagingException e) {
                  if (firstCause == null) { // first cause may be most important
                      firstCause = e;
                  }
              }
              ++challengeCount;
          }
      }
docs: ---------