def lambda_handler(event={}, context={}): """ Lambda handler. Parameters ---------- event : dict context : dict Returns ------- response : dict Return code and response body. """ gmail = Gmail() yamato = Yamato() publisher = LineBotPublisher() newer_than = os.environ['NEWER_THAN'] # Get message bodies messages = gmail.get_messages( maxResults=MAX_RESULTS, query=yamato.SEARCH_QUERY, newerThan=newer_than, ) if not messages: return { 'statusCode': 200, 'body': json.dumps('Not found yamato email in {0}'.format(newer_than)), } # Extract parcel and date from message body for message in messages: parcel_info = yamato.get_parcel_and_date(message=message) if not parcel_info['parcel'] and not parcel_info['date']: print('Cannot obtain from messages!: {0}'.format(message)) continue # Post to line publisher.post_text( os.environ['LINE_BOT_TO_ID'], generate_parcel_message(parcel_info), ) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!'), }
class App: ''' Terminal User Interface ''' def __init__(self, username, password): self.username = username self.password = password self.gmail = Gmail(username, password) self.__clear_screen() print("Logged in as: {}\nThis is an App for using Gmail on your terminal!\n\n".format( self.username)) self.main_menu() def __clear_screen(self): if (os.name == 'nt'): os.system('cls') else: os.system('clear') def send(self): recipient = input( "Type in the address of who you want to send an e-mail: ") subject = input("Type in the subject: ") print("Type in the body (enter a blank line when you`re finished): ") body = "" stopword = "" while True: line = input() if line.strip() == stopword: break body += "%s\n" % line self.gmail.send_message(recipient, subject, body) self.__clear_screen() print("message sent to {}\n\n".format(recipient)) self.main_menu() def select_folder(self, mode='Read'): self.gmail.load_mailbox() if (mode == 'Read'): print("From which folder would you like to read?\n") if (mode == 'Move_Message'): print("Select Folder to Move Message:") self.gmail.list_mailboxes() folders = self.gmail.folders total_mailboxes = len(folders) - 1 selection = int(input()) print(total_mailboxes, selection) if (selection <= total_mailboxes): self.__clear_screen() return folders[selection] else: self.__clear_screen() print(total_mailboxes) print("Please select a valid folder number.") self.select_folder() def read_folder(self): folder = self.select_folder() self.gmail.set_mailbox(folder) self.gmail.get_messages() if (len(self.gmail.messages) == 0): self.main_menu() total_messages = len(self.gmail.messages) selection = int(input("Select which e-mail to read:\n")) self.__clear_screen() self.gmail.read_message(selection) def read_POP3(self): gm = Gmail_POP(self.username, self.password) gm.session_POP() print("Downloading all messages.\n") gm.get_mails() gm.set_mailbox() gm.get_messages() selection = int(input("Select which e-mail to read:\n")) self.__clear_screen() gm.read_message(selection) def create_folder(self): folders = self.gmail.folders print("These are the current folders\n") self.gmail.list_mailboxes() selection = input( "Type in the name of the new folder (special symbols are prone to errors). If you want to create a subfolder you'll have to type in the full path, IE: 'Parent_Folder/Child_Folder':\n") name = '"{}"'.format(selection) if (name in folders): self.__clear_screen() print("You can't create two mailboxes with the same name.") self.create_folder() self.gmail.create_mailbox(name) self.__clear_screen() print("You created '{}'\nThis is the updated Folder List:\n".format(name)) self.gmail.list_mailboxes() self.main_menu() def delete_folder(self): folders = self.gmail.folders print("These are the current folders\n") self.gmail.list_mailboxes() selection = input( "Type in the name of the folder you'd like to delete (DON'T TRY DELETING ANYTHING THAT'S DEFAULT FROM GMAIL):\n") name = '"{}"'.format(selection) if (name not in folders): self.__clear_screen() print( "You can't delete '{}' because it's not listed. A typo ocurred, perhaps?".format(name)) self.delete_folder() self.gmail.delete_mailbox(name) self.__clear_screen() print("You deleted '{}'\nThis is the updated Folder List:\n".format(name)) self.gmail.list_mailboxes() self.main_menu() def move_message(self): folder = self.select_folder() self.gmail.set_mailbox(folder) self.gmail.get_messages() if (len(self.gmail.messages) == 0): self.__clear_screen() print( "No messages in this folder. Please choose a folder that contains a message.\n") self.move_message() total_messages = len(self.gmail.messages) m_id = int(input("Select which e-mail to move:\n")) print("") destination_folder = self.select_folder(mode='Move_Message') self.gmail.move_message(m_id, destination_folder) print("Message moved to {}\n".format(destination_folder)) self.main_menu() def folders_ops(self): selection = input( "Type what you would like to do and press Enter:\n1 - Create Folder\n2 - Delete Folder\n3 - Move e-mail between folders\n9 - Main Menu\n\n") if (selection == "1"): self.__clear_screen() self.create_folder() elif (selection == "2"): self.gmail.session_IMAP() self.__clear_screen() self.delete_folder() self.gmail.logout_IMAP() self.main_menu() elif (selection == "3"): self.__clear_screen() self.move_message() elif (selection == "9"): exit() else: self.__clear_screen() print("Please select 1, 2 or 3\n\n") self.main_menu() def main_menu(self): selection = input( "Type what you would like to do and press Enter:\n1 - Send e-mails\n2 - Read e-mails (IMAP)\n3 - Read e-mails (POP3)\n4 - Folders\n9 - Exit\n\n") if (selection == "1"): self.__clear_screen() self.send() elif (selection == "2"): self.gmail.session_IMAP() self.__clear_screen() self.read_folder() self.gmail.logout_IMAP() self.main_menu() elif (selection == "3"): self.__clear_screen() self.read_POP3() self.main_menu() elif (selection == "4"): self.__clear_screen() self.folders_ops() elif (selection == "9"): exit() else: self.__clear_screen() print("Please select 1, 2 or 3\n\n") self.main_menu()