docs: public SendEmailResponse sendEmail(SendEmailRequest request) {
          checkNotNull(request, "object request should not be null.");
          checkNotNull(request.getMail(), "object mail of request should not be null.");
  
          // validate source
          checkNotNull(request.getMail().getSource(), "object source of request should not be null.");
          assertStringNotNullOrEmpty(request.getMail().getSource().getFrom(), "from should not be null or empty.");
          checkIsEmail(request.getMail().getSource().getFrom());
  
          // validate subject
          checkNotNull(request.getMail().getSubject(), "object subject of request should not be null.");
          assertStringNotNullOrEmpty(request.getMail().getSubject().getData(), "subject should not be null or empty.");
          if (request.getMail().getSubject().getCharset() != null
                  && !Arrays.asList(new Integer[] { 0, 1, 2, 3, 4 })
                          .contains(request.getMail().getSubject().getCharset())) {
              throw new IllegalArgumentException("illegal charset.");
          }
  
          // validate body
          checkNotNull(request.getMail().getMessage(), "object message of request should not be null.");
          checkNotNull(request.getMail().getMessage().getHtml(), "object html of request should not be null.");
          assertStringNotNullOrEmpty(request.getMail().getMessage().getHtml().getData(),
                  "body should not be null or empty.");
          if (request.getMail().getMessage().getHtml().getCharset() != null
                  && !Arrays.asList(new Integer[] { 0, 1, 2, 3, 4 }).contains(
                          request.getMail().getMessage().getHtml().getCharset())) {
              throw new IllegalArgumentException("illegal charset.");
          }
  
          // validate priority
          if (request.getMail().getPriority() != null
                  && (request.getMail().getPriority() <= -1 || request.getMail().getPriority() >= 100)) {
              throw new IllegalArgumentException("illegal priority.");
          }
  
          // validate destination
          checkNotNull(request.getMail().getDestination(), "object destination of request should not be null.");
          assertListNotNullOrEmpty(request.getMail().getDestination().getToAddr(), "toAddr should not be null or empty.");
          for (Addr toAddr : request.getMail().getDestination().getToAddr()) {
              checkNotNull(toAddr, "object toAddr of request should not be null.");
              checkIsEmail(toAddr.getAddr());
          }
  
          InternalRequest internalRequest = this.createRequest("email", request, HttpMethodName.POST);
          // fill in the request payload
          internalRequest = fillRequestPayload(internalRequest, JsonUtils.toJsonString(request));
  
          // send email
          return this.invokeHttpClient(internalRequest, SendEmailResponse.class);
      }