docs: public BaseMessage sendMessageRequest(BaseMessage messageOut)
      {
          // create some properties and get the default Session
          TrxMessageHeader trxMessageHeader = (TrxMessageHeader)messageOut.getMessageHeader();
  
          String strFrom = (String)trxMessageHeader.get(TrxMessageHeader.REPLY_TO_PARAM);
          if (strFrom == null)
              strFrom = this.getProperty((TrxMessageHeader)messageOut.getMessageHeader(), TrxMessageHeader.REPLY_TO_PARAM); // See if there is an email default.
          String strSubject = (String)trxMessageHeader.get(SUBJECT_PARAM);
          String strTrxID = (String)trxMessageHeader.get(TrxMessageHeader.LOG_TRX_ID);
          if (strSubject == null)
              strSubject = "Message"; // Lame
          if (strTrxID != null)
              strSubject = strSubject + " (" + strTrxID + ")";
  
          Properties props = new Properties();
          String strSendBy = (String)trxMessageHeader.get(SEND_TRANSPORT);
          if (strSendBy == null)
              strSendBy = "smtp";
          String strHost = (String)trxMessageHeader.get(SMTP_HOST);
          if (strHost == null)
              strHost = (String)trxMessageHeader.get(HOST_PARAM);
          props.put(SMTP_HOST, strHost);
          String strAuth = (String)trxMessageHeader.get(SMTP_AUTH);   // "true"?
          if (strAuth != null)
              props.put(SMTP_AUTH, strAuth);
          if ((String)trxMessageHeader.get(SMTP_TLS)!= null)   // "true"?
              props.put(SMTP_TLS, (String)trxMessageHeader.get(SMTP_TLS));
          if ((String)trxMessageHeader.get("mail.smtp.socketFactory.port")!= null)
              props.put("mail.smtp.socketFactory.port", (String)trxMessageHeader.get("mail.smtp.socketFactory.port"));
          if ((String)trxMessageHeader.get("mail.smtp.socketFactory.class")!= null)
              props.put("mail.smtp.socketFactory.class", (String)trxMessageHeader.get("mail.smtp.socketFactory.class"));
          if ((String)trxMessageHeader.get("mail.smtp.socketFactory.fallback")!= null)
              props.put("mail.smtp.socketFactory.fallback", (String)trxMessageHeader.get("mail.smtp.socketFactory.fallback"));
          Session session = Session.getDefaultInstance(props);
          Properties sessionProp = session.getProperties();
          if (!sessionProp.equals(props))
              session = Session.getInstance(props);
          session.setDebug(DEBUG);
          
          String username = (String)trxMessageHeader.get(SMTP_USERNAME);
          if (username == null)
              if (DBConstants.TRUE.equalsIgnoreCase(strAuth))
                  username = strFrom;
          String password = (String)trxMessageHeader.get(SMTP_PASSWORD);
          password =  PasswordPropertiesField.decrypt(password);
  
          Transport transport = null;
        
          String strDest = this.getDestination(trxMessageHeader);
          MimeMessage msg = new MimeMessage(session);
          try
          {
              InternetAddress sender = new InternetAddress(strFrom);
              InternetAddress[] address = {new InternetAddress(strDest)};
  
              msg.setFrom(sender);
              msg.setRecipients(Message.RecipientType.TO, address);
              msg.setSubject(strSubject);
              msg.setSentDate(new Date());
              
              String msgHtml = (String)messageOut.get(ManualMessage.MESSAGE_PARAM);  // The physical message
              if (msgHtml == null)
                  msgHtml = (String)messageOut.getExternalMessage().getRawData();
  
              if (msgHtml == null)
                  msgHtml = "";
              // add the Multipart to the message
              String strContentType = (String)trxMessageHeader.get(CONTENT_TYPE_PARAM);
              if (strContentType == null)
                  strContentType = "text/html";
              msg.setContent(msgHtml, strContentType);
             
              msg.saveChanges();
               
              transport = session.getTransport(strSendBy);
              //         if (DBConstants.TRUE.equalsIgnoreCase(strAuth))
              transport.connect(strHost, username, password);
              //xaddress = msg.getAllRecipients(); //Don't do this - bug in javax.mail
              transport.sendMessage(msg, address);
              // send the message
              this.logMessage(strTrxID, messageOut, MessageInfoTypeModel.REQUEST, MessageTypeModel.MESSAGE_OUT, MessageStatusModel.SENT, null, null, null, -1, -1, msg, strDest);
          } catch (MessagingException mex) {
              mex.printStackTrace();
              String strError = mex.getMessage();
              Exception ex = null;
              if ((ex = mex.getNextException()) != null)
              {
                  strError = strError + ", " + ex.getMessage();
                  ex.printStackTrace();
              }
              this.logMessage(strTrxID, messageOut, MessageInfoTypeModel.REQUEST, MessageTypeModel.MESSAGE_OUT, MessageStatusModel.ERROR, null, null, strError, -1, -1, msg, strDest);
          } finally {
              try
              {
                  transport.close();
              }
              catch (Exception e)
              {}
          }
          return null;    // You never have an (immediate) reply from an email request.
      }