async def sendLink(app, files, email): if not isinstance(files, list): return web.json_response({'result': False, 'message': '参数files非list'}) if len(files) <= 0: return web.json_response({'result': False, 'message': '未选择要送的文件'}) # 更新Filelist表中状态01-已发送和文件的md5 async with app['db'].acquire() as conn: cursor = await conn.execute( Mail.select().where(Mail.c.uid == app['uid'])) row = await cursor.fetchone() if row is None: return web.json_response({'result': False, 'message': '用户发送邮箱未设置'}) # 生成文件的md5 urls = [] for fileid in files: filemd5 = hashlib.md5(fileid.encode('utf-8')).hexdigest() urls.append('http://%s:%d/download/%s' % (app['host'], app['port'], filemd5)) await conn.execute(Filelist.update().where( Filelist.c.fileid == fileid).values(status='01', filemd5=filemd5)) await api.writeLog(app=app, fileid=fileid, option='02', conn=conn) content = '\n'.join(urls) password = api.decryptADS(app['config'].mail.seckey, row.password) mail = api.sendMail(content, row.subject, row.mail, email, password) if mail.get('result'): return web.json_response({'result': True, 'message': '发送链接成功'}) else: return web.json_response({ 'result': False, 'message': mail.get('message') })
async def getMail(app): async with app['db'].acquire() as conn: cursor = await conn.execute( Mail.select().where(Mail.c.uid == app['uid'])) row = await cursor.fetchone() if row: data = {'mail': row.mail, 'password': None, 'subject': row.subject} return web.json_response({'result': True, 'row': data}) else: return web.json_response({'result': False})
async def updateMail(app, mail, password, subject): auth = api.authSMTP(mail, password) if not auth.get('result'): return web.json_response({ 'result': False, 'message': auth.get('message') }) async with app['db'].acquire() as conn: ads_pwd = api.encryptADS(app['config'].mail.seckey, password) cursor = await conn.execute( Mail.select().where(Mail.c.uid == app['uid'])) row = await cursor.fetchone() print(row) if row: cursor = await conn.execute(Mail.update().where( Mail.c.uid == app['uid']).values(mail=mail, password=ads_pwd, subject=subject)) if cursor.rowcount == 1: return web.json_response({ 'result': True, 'message': '电子邮件更新成功' }) else: return web.json_response({ 'result': False, 'message': '电子邮件更新失败' }) else: cursor = await conn.execute(Mail.insert(), uid=app['uid'], mail=mail, password=ads_pwd, subject=subject) if cursor.rowcount == 1: return web.json_response({ 'result': True, 'message': '电子邮件新增成功' }) else: return web.json_response({ 'result': False, 'message': '电子邮件新增失败' })
def load_emails(self, folder: Folder): self._connection.change_mailbox(self._to_utf_7(folder.name)) date = datetime.now() - timedelta(weeks=2) date_criterion = self._create_date_criterion(date) ids_on_server = [ int(id) for id in self._connection.listids(sys.maxsize, date_criterion) ] self._delete_mail_not_on_server(ids_on_server, folder, date) local_ids = [ mail.uid for mail in Mail.select().where(Mail.folder == folder) ] for id_ in ids_on_server: if id_ in local_ids: continue mail = self._connection.mail(str(id_).encode(), include_raw=True) try: encoding = self._charset_pattern.search( mail.content_type).group(1) except (IndexError, AttributeError): encoding = "utf-8" raw_mail = email.message_from_string(mail.raw.decode(encoding)) body, is_html = self._get_body(raw_mail) subject = mail.title if mail.title else '' mail_instance = Mail.create(uid=id_, folder=folder, body=body, subject=subject, recipient=mail.to, sender=mail.from_addr, datetime=mail.date, is_html=is_html) self._load_attachments(mail_instance, mail)