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)
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)
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)