示例#1
0
    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
示例#2
0
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()
示例#3
0
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)