Example #1
0
    def OnFileSaveAs(self, event):
        item = self.tree.last_item_data()
        if not item:
            return
        user  = item['user']
        panel = item['panel']

        data = panel.get_item_data()
        loginfo('save data:', data)

        dlg = wx.FileDialog(
            self, message=u"保存邮件",
            defaultDir=os.getcwd(), 
            defaultFile="",
            wildcard=u"邮件内容 (*.html)|*.html",
            style=wx.SAVE
            )
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
            if path:
                info = mailparse.decode_mail(data['filepath'])
                if info['html']:
                    data = u'主 题: ' + info['subject'] + u'<br>发件人: ' + info['from'] + '<br><br>' + info['html']
                else:
                    data = u'主 题: ' + info['subject'] + u'<br>发件人: ' + info['from'] + '<br><br>' + info['plain'].replace('\n', '<br>')
                f = open(path, 'w')
                f.write(data.encode(mailparse.charset, 'ignore'))
                f.close()
        dlg.Destroy()
Example #2
0
    def OnActivate(self, evt):
        #loginfo('event:', evt)
        loginfo('OnActivate: %s' % self.tree.GetItemText(evt.GetItem()))
        self.lastitem = evt.GetItem()
        row = self.tree.GetItemData(evt.GetItem()).GetData()
        #loginfo('active row:', row)
        if not row:
            logerr('not found row.')
            return
        if not row.has_key('id'):
            loginfo('is category.')
            return
        #mid, name, mbox = s
        mid  = row['id']
        name = row['user']
        mbox = row['box']

        info = mailparse.decode_mail(row['filepath'])
        
        htmldata = info['html']
        plaindata = info['plain']
        #if htmldata:
        #    self.parent.listcnt.set_text(htmldata)
        #elif plaindata:
        #    self.parent.listcnt.set_text(plaindata.replace('\r\n', '<br>').replace('\n', '<br>'))
        self.parent.listcnt.set_text_auto(htmldata, plaindata)

        attachctl = self.parent.attachctl
        attachctl.clear()
        
        #row['attach'] = simplejson.loads(row['attach'])

        for item in row['attach']:
            filename = os.path.join(config.cf.datadir, name, row['mailbox'], row['filename'].strip(os.sep))
            homename = os.path.join(config.cf.datadir, name)
            attachdata = {'file':filename, 'home':homename, 'attach':item[0]}
            loginfo('attachdata:', attachdata)
            attachctl.add_file(item[0], attachdata)

        if row['status'] == 'noread':
            #row['status'] = 'read' 
            item = evt.GetItem()
            itemdata = self.tree.GetItemData(item).GetData()
            #loginfo('noread itemdata:', itemdata)
            self.draw_category_text(item, 'read')
            self.tree.SetItemBold(item, False)
        
            sql = "update mailinfo set status='read' where id=" + str(itemdata['id'])
            loginfo('read:', sql)
            db = dbope.openuser(config.cf, name)
            db.execute(sql)
            db.close()

        self.SetFocus()
Example #3
0
 def get_item_content(self, item=None):
     if not item:
         item = self.lastitem
     if not item:
         raise ValueError, 'item must not None'
     
     data = self.tree.GetItemData(item).GetData()
     if not data:
         raise ValueError, "not found item data"
     
     info = mailparse.decode_mail(data['filepath'])
     data['html'] = info['html']
     data['plain'] = info['plain']
     
     return data
Example #4
0
 def make_viewer(self, mailfile):
     ret = mailparse.decode_mail(mailfile)
     #panel = wx.Panel(self)
     sizer = wx.BoxSizer(wx.VERTICAL)
     self.viewer = viewhtml.ViewHtml(self)
     self.viewer.set_text_auto(ret['html'], ret['plain'])
     sizer.Add(self.viewer, flag=wx.ALL|wx.EXPAND, border=0, proportion=1)
         
     if ret['attach']:
         self.attachctl = viewhtml.AttachListCtrl(self, self.rundir, wx.Size(-1,100))
         sizer.Add(self.attachctl, flag=wx.ALL|wx.EXPAND, border=0, proportion=0)
         homepath = os.path.join(config.cf.datadir, self.user)
         for item in ret['attach']:
             self.attachctl.add_file(item[0], {'home':homepath, 'file':mailfile, 'attach':item[0]})
     
     self.SetSizer(sizer)
Example #5
0
def mail_import(user, boxnode, filename):
    hashdir_count = 10
    info = mailparse.decode_mail(filename)

    attachs = []
    for x in info["attach"]:
        attachs.append("::".join(x))
    attachstr = "||".join(attachs)

    att = 0
    if len(info["attach"]) > 0:
        att = 1
    if boxnode["boxname"].find("/") == -1:
        mailbox = config.cf.mailbox_map_cn2en[boxnode["boxname"]]
    else:
        return
    info["mailbox"] = mailbox
    info["ctime"] = "datetime()"
    info["user"] = user

    fname = uuid.uuid1().urn[9:]
    hashdir = "%02d" % (hash(fname) % hashdir_count)
    timepath = "%d%02d" % time.localtime()[:2]
    newdir = os.path.join(config.cf.datadir, user, mailbox, timepath, hashdir)
    if not os.path.isdir(newdir):
        os.makedirs(newdir)
    newfilename = os.sep + os.path.join(timepath, hashdir, "%d." % (int(time.time())) + fname + ".eml")
    dstfile = os.path.join(newdir, "%d." % (int(time.time())) + fname + ".eml")

    info["filename"] = newfilename
    subject = info["subject"].replace("'", "''")
    attach = attachstr.replace("'", "''")

    sql = (
        "insert into mailinfo(filename,subject,mailfrom,mailto,size,ctime,date,attach,mailbox,status) values "
        "('%s','%s','%s','%s',%d,%s,'%s','%s','%s','noread')"
        % (
            newfilename,
            subject,
            info["from"],
            ",".join(info["to"]),
            info["size"],
            info["ctime"],
            info["date"],
            attach,
            info["mailbox"],
        )
    )
    conn = dbope.openuser(config.cf, user)
    conn.execute(sql)
    conn.close()
    shutil.copyfile(filename, dstfile)
    info["box"] = "/%s/%s" % (user, info["mailbox"])
    info["status"] = "noread"
    info["filepath"] = os.path.join(config.cf.datadir, user, info["mailbox"], info["filename"].lstrip(os.sep))
    item = [
        info["from"],
        att,
        info["subject"],
        1,
        info["date"],
        str(info["size"] / 1024 + 1) + " K",
        wx.TreeItemData(info),
    ]
    panel = boxnode["panel"]
    panel.add_mail(item)