Example #1
0
    def Create(cls,
               idx,
               mbox_id,
               mbx,
               msg_to=None,
               msg_cc=None,
               msg_bcc=None,
               msg_from=None,
               msg_subject=None,
               msg_text=None,
               msg_references=None,
               save=True,
               ephemeral_mid='not-saved'):
        msg = MIMEMultipart()
        msg.signature_info = SignatureInfo()
        msg.encryption_info = EncryptionInfo()
        msg_ts = int(time.time())
        if not msg_from:
            msg_from = idx.config.get_profile().get('email', None)
            from_name = idx.config.get_profile().get('name', None)
            if msg_from and from_name:
                msg_from = '%s <%s>' % (from_name, msg_from)
        if not msg_from:
            raise NoFromAddressError()
        msg['From'] = cls.encoded_hdr(None, 'from', value=msg_from)
        msg['Date'] = email.utils.formatdate(msg_ts)
        msg['Message-Id'] = email.utils.make_msgid('mailpile')
        msg_subj = (msg_subject or '')
        msg['Subject'] = cls.encoded_hdr(None, 'subject', value=msg_subj)
        if msg_to:
            msg['To'] = cls.encoded_hdr(None,
                                        'to',
                                        value=', '.join(set(msg_to)))
        if msg_cc:
            msg['Cc'] = cls.encoded_hdr(None,
                                        'cc',
                                        value=', '.join(set(msg_cc)))
        if msg_bcc:
            msg['Bcc'] = cls.encoded_hdr(None,
                                         'bcc',
                                         value=', '.join(set(msg_bcc)))
        if msg_references:
            msg['In-Reply-To'] = msg_references[-1]
            msg['References'] = ', '.join(msg_references)

        if msg_text:
            try:
                msg_text.encode('us-ascii')
                charset = 'us-ascii'
            except UnicodeEncodeError:
                charset = 'utf-8'
            textpart = MIMEText(msg_text, _subtype='plain', _charset=charset)
            textpart.signature_info = SignatureInfo()
            textpart.encryption_info = EncryptionInfo()
            msg.attach(textpart)
            del textpart['MIME-Version']

        if save:
            msg_key = mbx.add(msg)
            msg_to = msg_cc = []
            msg_ptr = mbx.get_msg_ptr(mbox_id, msg_key)
            msg_id = idx.get_msg_id(msg, msg_ptr)
            msg_idx, msg_info = idx.add_new_msg(msg_ptr, msg_id, msg_ts,
                                                msg_from, msg_to, msg_cc, 0,
                                                msg_subj, '', [])
            idx.set_conversation_ids(msg_info[idx.MSG_MID],
                                     msg,
                                     subject_threading=False)
            return cls(idx, msg_idx)
        else:
            msg_info = idx.edit_msg_info(idx.BOGUS_METADATA[:],
                                         msg_mid=ephemeral_mid or '',
                                         msg_id=msg['Message-ID'],
                                         msg_ts=msg_ts,
                                         msg_subject=msg_subj,
                                         msg_from=msg_from,
                                         msg_to=msg_to,
                                         msg_cc=msg_cc)
            return cls(idx,
                       -1,
                       msg_info=msg_info,
                       msg_parsed=msg,
                       msg_parsed_pgpmime=msg,
                       ephemeral_mid=ephemeral_mid)
Example #2
0
    def Create(cls, idx, mbox_id, mbx,
               msg_to=None, msg_cc=None, msg_bcc=None, msg_from=None,
               msg_subject=None, msg_text=None, msg_references=None,
               save=True, ephemeral_mid='not:saved'):
        msg = MIMEMultipart()
        msg.signature_info = SignatureInfo()
        msg.encryption_info = EncryptionInfo()
        msg_ts = int(time.time())
        if not msg_from:
            msg_from = idx.config.get_profile().get('email', None)
            from_name = idx.config.get_profile().get('name', None)
            if msg_from and from_name:
                msg_from = '%s <%s>' % (from_name, msg_from)
        if not msg_from:
            raise NoFromAddressError()
        msg['From'] = cls.encoded_hdr(None, 'from', value=msg_from)
        msg['Date'] = email.utils.formatdate(msg_ts)
        msg['Message-Id'] = email.utils.make_msgid('mailpile')
        msg_subj = (msg_subject or 'New message')
        msg['Subject'] = cls.encoded_hdr(None, 'subject', value=msg_subj)
        if msg_to:
            msg['To'] = cls.encoded_hdr(None, 'to',
                                        value=', '.join(set(msg_to)))
        if msg_cc:
            msg['Cc'] = cls.encoded_hdr(None, 'cc',
                                        value=', '.join(set(msg_cc)))
        if msg_bcc:
            msg['Bcc'] = cls.encoded_hdr(None, 'bcc',
                                         value=', '.join(set(msg_bcc)))
        if msg_references:
            msg['In-Reply-To'] = msg_references[-1]
            msg['References'] = ', '.join(msg_references)

        if msg_text:
            try:
                msg_text.encode('us-ascii')
                charset = 'us-ascii'
            except UnicodeEncodeError:
                charset = 'utf-8'
            textpart = MIMEText(msg_text, _subtype='plain', _charset=charset)
            textpart.signature_info = SignatureInfo()
            textpart.encryption_info = EncryptionInfo()
            msg.attach(textpart)
            del textpart['MIME-Version']

        if save:
            msg_key = mbx.add(msg)
            msg_to = msg_cc = []
            msg_ptr = mbx.get_msg_ptr(mbox_id, msg_key)
            msg_id = idx.get_msg_id(msg, msg_ptr)
            msg_idx, msg_info = idx.add_new_msg(msg_ptr, msg_id, msg_ts,
                                                msg_from, msg_to, msg_cc, 0,
                                                msg_subj, '', [])
            idx.set_conversation_ids(msg_info[idx.MSG_MID], msg,
                                     subject_threading=False)
            return cls(idx, msg_idx)
        else:
            msg_info = idx.edit_msg_info(idx.BOGUS_METADATA[:],
                                         msg_mid=ephemeral_mid or '',
                                         msg_id=msg['Message-ID'],
                                         msg_ts=msg_ts,
                                         msg_subject=msg_subj,
                                         msg_from=msg_from,
                                         msg_to=msg_to,
                                         msg_cc=msg_cc)
            return cls(idx, -1,
                       msg_parsed=msg, msg_info=msg_info,
                       ephemeral_mid=ephemeral_mid)
Example #3
0
    def Create(
        cls,
        idx,
        mbox_id,
        mbx,
        msg_to=None,
        msg_cc=None,
        msg_bcc=None,
        msg_from=None,
        msg_subject=None,
        msg_text=None,
        msg_references=None,
        save=True,
        ephemeral_mid="not:saved",
    ):
        msg = MIMEMultipart()
        msg.signature_info = SignatureInfo()
        msg.encryption_info = EncryptionInfo()
        msg_ts = int(time.time())
        if not msg_from:
            msg_from = idx.config.get_profile().get("email", None)
            from_name = idx.config.get_profile().get("name", None)
            if msg_from and from_name:
                msg_from = "%s <%s>" % (from_name, msg_from)
        if not msg_from:
            raise NoFromAddressError()
        msg["From"] = cls.encoded_hdr(None, "from", value=msg_from)
        msg["Date"] = email.utils.formatdate(msg_ts)
        msg["Message-Id"] = email.utils.make_msgid("mailpile")
        msg_subj = msg_subject or "New message"
        msg["Subject"] = cls.encoded_hdr(None, "subject", value=msg_subj)
        if msg_to:
            msg["To"] = cls.encoded_hdr(None, "to", value=", ".join(set(msg_to)))
        if msg_cc:
            msg["Cc"] = cls.encoded_hdr(None, "cc", value=", ".join(set(msg_cc)))
        if msg_bcc:
            msg["Bcc"] = cls.encoded_hdr(None, "bcc", value=", ".join(set(msg_bcc)))
        if msg_references:
            msg["In-Reply-To"] = msg_references[-1]
            msg["References"] = ", ".join(msg_references)
        if msg_text:
            try:
                msg_text.encode("us-ascii")
                charset = "us-ascii"
            except:
                charset = "utf-8"
            textpart = MIMEText(msg_text, _subtype="plain", _charset=charset)
            textpart.signature_info = SignatureInfo()
            textpart.encryption_info = EncryptionInfo()
            msg.attach(textpart)
            del textpart["MIME-Version"]

        if save:
            msg_key = mbx.add(msg)
            msg_to = msg_cc = []
            msg_ptr = mbx.get_msg_ptr(mbox_id, msg_key)
            msg_id = idx.get_msg_id(msg, msg_ptr)
            msg_idx, msg_info = idx.add_new_msg(msg_ptr, msg_id, msg_ts, msg_from, msg_to, msg_cc, 0, msg_subj, "", [])
            idx.set_conversation_ids(msg_info[idx.MSG_MID], msg, subject_threading=False)
            return cls(idx, msg_idx)
        else:
            msg_info = idx.edit_msg_info(
                idx.BOGUS_METADATA[:],
                msg_mid=ephemeral_mid or "",
                msg_id=msg["Message-ID"],
                msg_ts=msg_ts,
                msg_subject=msg_subj,
                msg_from=msg_from,
                msg_to=msg_to,
                msg_cc=msg_cc,
            )
            return cls(idx, -1, msg_parsed=msg, msg_info=msg_info, ephemeral_mid=ephemeral_mid)