<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def create_message(self, project_id, category_id, title, body, extended_body, use_textile=False, private=False, notify=None, attachments=None):
 """ Creates a new message, optionally sending notifications to a selected list of people. Note that you can also upload files using this function, but you need to upload the files first and then attach them. See the description at the top of this document for more information. """

        path = '/projects/%u/msg/create' % project_id
        req = ET.Element('request')
        req.append(self._create_message_post_elem(category_id, title, body,
            extended_body, use_textile=False, private=False))
        if notify is not None:
            for person_id in notify:
                ET.SubElement(req, 'notify').text = str(int(person_id))
        # TODO: Implement attachments.
        if attachments is not None:
            raise NotSupportedErr('Attachments are currently not implemented.')
        ##for attachment in attachments:
        ##    attms = ET.SubElement(req, 'attachments')
        ##    if attachment['name']:
        ##        ET.SubElement(attms, 'name').text = str(attachment['name'])
        ##    file_ = ET.SubElement(attms, 'file')
        ##    ET.SubElement(file_, 'file').text = str(attachment['temp_id'])
        ##    ET.SubElement(file_, 'content-type').text \
        ##        = str(attachment['content_type'])
        ##    ET.SubElement(file_, 'original-filename').text \
        ##        = str(attachment['original_filename'])
        return self._request(path, req)