code: protected void prepareBody(CardView view, SMailPostingMessage message) {
          final String plainText = toCompletePlainText(view);
          final OptionalThing<String> optHtmlText = toCompleteHtmlText(view);
          message.savePlainTextForDisplay(plainText);
          message.saveHtmlTextForDisplay(optHtmlText);
          final Map<String, SMailAttachment> attachmentMap = view.getAttachmentMap();
          final MimeMessage nativeMessage = message.getMimeMessage();
          if (attachmentMap.isEmpty()) { // normally here
              setupTextPart(view, nativeMessage, plainText, TextType.PLAIN); // plain is required
              optHtmlText.ifPresent(htmlText -> {
                  setupTextPart(view, nativeMessage, htmlText, TextType.HTML);
              });
          } else { // with attachment
              if (optHtmlText.isPresent()) {
                  throw new SMailIllegalStateException("Unsupported HTML mail with attachment for now: postcard=" + view);
              }
              try {
                  final MimeMultipart multipart = createTextWithAttachmentMultipart(view, message, plainText, attachmentMap);
                  nativeMessage.setContent(multipart);
              } catch (MessagingException e) {
                  String msg = "Failed to set attachment multipart content: postcard=" + view;
                  throw new SMailIllegalStateException(msg, e);
              }
          }
      }
docs: ============