print(message.html) print(message.flags) for filename, payload in message.attachments: print(filename, payload) # MAILBOX # ------- # NOTE: You can use 2 approaches to perform these operations # "by one" - Perform operation for each message separately per N commands # "in bulk" - Perform operation for message set per 1 command # COPY all messages from current dir to folder1, *by one for msg in mailbox.fetch(): res = mailbox.copy(msg.uid, 'INBOX/folder1') # DELETE all messages from current dir to folder1, *in bulk mailbox.delete([msg.uid for msg in mailbox.fetch()]) # FLAG unseen messages in current folder as Answered and Flagged, *in bulk mailbox.flag([msg.uid for msg in mailbox.fetch('(UNSEEN)')], ['Answered', 'Flagged'], True) # MOVE all messages from current dir to folder2, *in bulk mailbox.move([msg.uid for msg in mailbox.fetch()], 'INBOX/folder2') # mark SEEN all messages sent at 05.03.2007 in current folder as unseen, *in bulk mailbox.seen([msg.uid for msg in mailbox.fetch("SENTON 05-Mar-2007")], False) # FOLDERS # ------- # LIST for folder in mailbox.folder.list('INBOX'): print(folder['flags'], folder['delim'], folder['name']) # SET mailbox.folder.set('INBOX') # GET
async def updatemails(ctx): """Check for new staff applications and ban appeals""" if "Staff" not in str(ctx.author.roles): await ctx.respond(":warning: Insufficient permission.", ephemeral=True) return channel = bot.get_channel(564783779474833431) # Connect to imap mailbox = MailBox(config.IMAP_HOST).login(config.IMAP_NAME, config.IMAP_PASS, "INBOX") # Cycle through inbox for mail in mailbox.fetch(): # Try to split the email into the form's parts try: content = mail.text.split("§§") except: pass # Switch submission types # Staff application if len(content) == 11: embed = discord.Embed( title=content[0], description=f"{content[1]} years old, {content[2]}") embed.add_field(name="Minecraft username", value=f"`{content[3]}`", inline=True) embed.add_field(name="Discord#Tag", value=f"`{content[4]}`", inline=True) embed.add_field(name="E-mail", value=f"`{content[5]}`", inline=True) embed.add_field(name="Do you have experience as staff?", value=content[6], inline=False) embed.add_field(name="Why do you want to be staff?", value=content[7], inline=False) embed.add_field( name="Why should you be chosen instead of someone else?", value=content[8], inline=False) embed.add_field( name="Do you have any issues with the current staff team?", value=content[9], inline=False) embed.add_field(name="How many hours per week can you contribute?", value=content[10], inline=False) content_length = len(content[6].split()) + len( content[7].split()) + len(content[8].split()) embed.set_footer(text=f"{content_length} words") if content_length > 50: msg = await channel.send( content="**STAFF APPLICATION** @staff", embed=embed) else: msg = await channel.send(content="**STAFF APPLICATION**", embed=embed) await msg.add_reaction("<:vote_yes:601899059417972737>") await msg.add_reaction("<:vote_no:601898704231989259>") await msg.create_thread(name=f"{content[0]}\'s Staff Application") # Ban appeal elif len(content) == 4: embed = discord.Embed(title="Ban Appeal") embed.add_field(name="Minecraft username", value=f"`{content[0]}`", inline=True) embed.add_field(name="Contact", value=f"`{content[1]}`", inline=True) embed.add_field(name="More about your ban", value=content[2], inline=False) embed.add_field(name="Why should you be unbanned?", value=content[3], inline=False) content_length = len(content[2].split()) + len(content[3].split()) embed.set_footer(text="{} words".format(content_length)) if content_length > 50: msg = await channel.send(content="@staff", embed=embed) else: msg = await channel.send(embed=embed) await msg.add_reaction("<:vote_yes:601899059417972737>") await msg.add_reaction("<:vote_no:601898704231989259>") await msg.create_thread(name=f"{content[0]}\'s Ban Appeal") # Unknown else: embed = discord.Embed( title="Unknown email", description= f"I've received an email that doesn't match the layout of any form:\n\n{mail.text}" ) await channel.send(embed=embed) # Delete the email and log out mailbox.delete(mail.uid) mailbox.logout()
class CustomMailBox(): def __init__(self,user,pas,host='imap.gmail.com',n_per_page=40,folder='INBOX'): self.user=user self.pwd = pas self.host = host self.folder = folder self.n_per_page = n_per_page def authuser(self): try: self.Mb_main = MailBox(host=self.host) self.Mb_main.login(self.user,self.pwd) d = dict() for f in self.Mb_main.folder.list(): d[f['name'].split('/')[-1]] = f['name'] self.Mb_main.folder.set(d[self.folder]) return d except: return False def getbypagenum(self,page_number,searchterm): d = self.authuser() if d: print(page_number,self.n_per_page,'ufifidh') mb = IMAPClient(self.host) mb.login(self.user,self.pwd) mb.select_folder(d[self.folder]) if searchterm: ids= mb.search(['OR',['OR',[u'TEXT',f'{searchterm}'],['FROM',f'{searchterm}']],['OR',[u'SUBJECT',f'{searchterm}'],[u'BODY',f'{searchterm}']]]) else: ids = mb.search() print(len(ids),'hmmm') last = math.ceil(len(ids)/self.n_per_page) print(last,'last page') page_number = last-page_number+1 start = max(0,((page_number-1)*self.n_per_page)) end = min(len(ids),(page_number*self.n_per_page)) print(start,end) print(ids[start:end]) return (next(self.Mb_main.fetch(AND(uid=f'{m}'),headers_only=True,reverse=True) )for m in reversed(ids[start:end])),last def getbyuid(self,uid): if self.authuser(): return self.Mb_main.fetch(AND(uid=uid)) def getbysearch(self,text): if self.authuser(): return self.Mb_main.fetch(OR(subject=text)) def get_searched_chunks(self): gen = self.get_searched_chunks() pass def get_info(self,folder='INBOX'): if self.authuser(): return self.Mb_main.folder.status(folder) def get_folders(self): if self.authuser(): return self.Mb_main.folder.list() def get_cur(self): if self.authuser(): return self.Mb_main.folder.get() def create_folder(self,folder): if self.authuser(): if self.Mb_main.folder.exists(folder): return 'no' self.Mb_main.folder.create(folder) return 'ok' def delete_folder(self,folder): if self.authuser(): self.Mb_main.folder.delete(folder) def rename_folder(self,folder): d = self.authuser() if d: self.Mb_main.folder.rename(d[self.folder],folder) def delete_msg(self,uid): if self.authuser(): self.Mb_main.delete(uid) def move_msgto(self,folder,uid): if self.authuser(): self.Mb_main.move(uid,folder) def copy_msgto(self,folder,uid): if self.authuser(): self.Mb_main.copy(uid,folder)