docs: def set_auto_reply(self, message, status=AutoReplyStatus.ALWAYS_ENABLED, start=None, end=None,
                         external_message=None, audience=AutoReplyAudience.ALL):
          # type: (str, OutlookAccount.AutoReplyStatus, datetime, datetime, str, OutlookAccount.AutoReplyAudience) -> None
          """ Set an automatic reply for the account.
          Args:
              message (str): The message to be sent in replies. If external_message is provided this is the message sent
              to internal recipients
              status (OutlookAccount.AutoReplyStatus): Whether the auto-reply should be always enabled, scheduled, or
              disabled. You can use :class:`AutoReplyStatus <pyOutlook.core.main.OutlookAccount.AutoReplyStatus>` to
              provide the value. Defaults to ALWAYS_ENABLED.
              start (datetime): If status is set to SCHEDULED, this is when the replies will start being sent.
              end (datetime): If status is set to SCHEDULED, this is when the replies will stop being sent.
              external_message (str): If provided, this message will be sent to external recipients.
              audience (OutlookAccount.AutoReplyAudience): Whether replies should be sent to everyone, contacts only,
              or internal recipients only. You can use
              :class:`AutoReplyAudience <pyOutlook.core.main.OutlookAccount.AutoReplyAudience>` to provide the value.
  
          """
  
          start_is_none = start is None
          end_is_none = end is None
  
          if (not start_is_none and end_is_none) or (start_is_none and not end_is_none):
              raise ValueError('Start and End not must both either be None or datetimes')
  
          start_is_datetime = isinstance(start, datetime)
          end_is_datetime = isinstance(end, datetime)
  
          if not start_is_datetime and not start_is_none or not end_is_datetime and not end_is_none:
              raise ValueError('Start and End must both either be None or datetimes')
  
          request_data = dict(Status=status, ExternalAudience=audience)
  
          # Outlook requires both an internal and external message. For convenience, pyOutlook allows only one message
          # and uses that as the external message if none is provided
          if external_message is None:
              external_message = message
  
          request_data.update(InternalReplyMessage=message, ExternalReplyMessage=external_message)
  
          if not start_is_none and not end_is_none:
              request_data.update(ScheduledStartDateTime=dict(DateTime=str(start)))
              request_data.update(ScheduledEndDateTime=dict(DateTime=str(end)))
  
          data = {
              "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/MailboxSettings",
              "AutomaticRepliesSetting": request_data
          }
  
          requests.patch('https://outlook.office.com/api/v2.0/me/MailboxSettings',
                         headers=self._headers, data=json.dumps(data))
  
          self._auto_reply = message