def release(content, driver, account): transactionIndex = content.find("Transaction:") transaction = content[transactionIndex:content[transactionIndex:]. find("\n") + transactionIndex] ccnIndex = content.find("Cargo Control Number:") releaseIndex = content.find("Release Office: ") ccn = content[ccnIndex + 22:releaseIndex].strip() transaction = transaction + "\n" + content[ccnIndex:content[ccnIndex:]. find("\n") + ccnIndex] deliveryIndex = content.find("Delivery Instructions") - 2 containerIndex = content.find("Container ID(s):") + 17 containers = [] if containerIndex < deliveryIndex: while containerIndex < deliveryIndex: containers.append( content[containerIndex:content[containerIndex:].find(",") + containerIndex].strip()) containerIndex = content[containerIndex:].find( ",") + 1 + containerIndex print("\nReleasing the following containers: ") for cont in containers: sendRelease(cont, transaction, driver, account) else: m = Message( account=account, subject='CCN is Released: ' + ccn, body='PB #(if Seaport CCN): ' + ccn[-6:] + "\n\nThe RNS release message did not have a container number in it\n\n\nTHIS IS AN AUTOMATED MESSAGE, DO NOT REPLY", to_recipients=[ Mailbox(email_address='*****@*****.**'), ]) m.send() print("\nEmail with no container number")
def test_counts(self): # Test count values on a folder f = Folder(parent=self.account.inbox, name=get_random_string(16)).save() f.refresh() self.assertEqual(f.total_count, 0) self.assertEqual(f.unread_count, 0) self.assertEqual(f.child_folder_count, 0) # Create some items items = [] for i in range(3): subject = 'Test Subject %s' % i item = Message(account=self.account, folder=f, is_read=False, subject=subject, categories=self.categories) item.save() items.append(item) # Refresh values and see that total_count and unread_count changes f.refresh() self.assertEqual(f.total_count, 3) self.assertEqual(f.unread_count, 3) self.assertEqual(f.child_folder_count, 0) for i in items: i.is_read = True i.save() # Refresh values and see that unread_count changes f.refresh() self.assertEqual(f.total_count, 3) self.assertEqual(f.unread_count, 0) self.assertEqual(f.child_folder_count, 0) self.bulk_delete(items) # Refresh values and see that total_count changes f.refresh() self.assertEqual(f.total_count, 0) self.assertEqual(f.unread_count, 0) self.assertEqual(f.child_folder_count, 0) # Create some subfolders subfolders = [] for i in range(3): subfolders.append( Folder(parent=f, name=get_random_string(16)).save()) # Refresh values and see that child_folder_count changes f.refresh() self.assertEqual(f.total_count, 0) self.assertEqual(f.unread_count, 0) self.assertEqual(f.child_folder_count, 3) for sub_f in subfolders: sub_f.delete() # Refresh values and see that child_folder_count changes f.refresh() self.assertEqual(f.total_count, 0) self.assertEqual(f.unread_count, 0) self.assertEqual(f.child_folder_count, 0) f.delete()
def send_and_save_common_message(self, subject, body, to): try: m = Message(account=self.exchangelib_connection, folder=a.sent, subject=subject, body=body, to_recipients=to) m.send_and_save() print('Your message send success!') except Exception: print('Please try again!')
def test_parse_incident_from_item_with_attachments(): """ Given: - Message item with attachment that contains email attachments When: - Parsing incident from item Verify: - Parsing runs successfully """ content = b'ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901;' \ b' d=microsoft.com; cv=none;b=ES/YXpFlV19rlN1iV+ORg5RzID8GPSQL' \ b'nUT26MNdeTzcQSwK679doIz5Avpv8Ps2H/aBkBamwRNOCJBkl7iCHyy+04yRj3ghikw3u/ufIFHi0sQ7QG95mO1PVPLibv9A==' message = Message( datetime_created=EWSDate(year=2021, month=1, day=25), to_recipients=[], attachments=[ ItemAttachment( item=Item(mime_content=content, headers=[]), attachment_id=AttachmentId(), last_modified_time=EWSDate(year=2021, month=1, day=25), ), ], ) incident = parse_incident_from_item(message) assert incident['attachment']
def test_parse_incident_from_item(): """ Given: - Message item with attachment that contains non UTF-8 encoded char When: - Parsing incident from item Verify: - Parsing runs successfully - Incidnet attachment is not empty """ message = Message( datetime_created=EWSDate(year=2021, month=1, day=25), to_recipients=[], attachments=[ ItemAttachment( item=Item(mime_content=b'\xc400'), attachment_id=AttachmentId(), last_modified_time=EWSDate(year=2021, month=1, day=25), ), ], ) incident = parse_incident_from_item(message) assert incident['attachment']
def test_metrics(): metrics.stats.update(default_metrics) bad_message = Message(headers=None, sender=Mailbox(email_address='')) relay(bad_message, None) assert metrics.stats['message_ignore_count'] == 1 metrics.stats.update(default_metrics) bad_message = Message( headers=[MessageHeader(name='X-Autoreply', value='yes')], sender=Mailbox(email_address='')) relay(bad_message, None) assert metrics.stats['message_ignore_count'] == 1 fake_iris_client = IrisClient('http://localhost') good_message = Message(headers=[], sender=Mailbox(email_address=''), text_body='') with requests_mock.mock() as m: m.post('http://localhost/v0/response/email') metrics.stats.update(default_metrics) relay(good_message, fake_iris_client) assert metrics.stats['message_relay_success_count'] == 1 assert metrics.stats['incident_created_count'] == 0 with requests_mock.mock() as m: m.post('http://localhost/v0/response/email', headers={'X-IRIS-INCIDENT': '1234'}) metrics.stats.update(default_metrics) relay(good_message, fake_iris_client) assert metrics.stats['message_relay_success_count'] == 1 assert metrics.stats['incident_created_count'] == 1 with requests_mock.mock() as m: m.post('http://localhost/v0/response/email', status_code=500) metrics.stats.update(default_metrics) relay(good_message, fake_iris_client) assert metrics.stats['message_relay_failure_count'] == 1 with requests_mock.mock() as m: m.post('http://localhost/v0/response/email', status_code=400) metrics.stats.update(default_metrics) relay(good_message, fake_iris_client) assert metrics.stats['malformed_message_count'] == 1
def send_with_attachment(self, subject, body, to, path, cc): if os.path.exists(path): try: item = Message(account=self.exchangelib_connection, folder=a.sent, subject=subject, body=body, to_recipients=to, cc_recipients=cc) with open(path, 'rb') as f: binary_file_content = f.read() my_file = FileAttachment(name=os.path.basename(path), content=binary_file_content) item.attach(my_file) item.save() item.send_and_save() print('Your message send success!') except Exception: print('Please try again!') else: print('Please check your path')
def test_pickle(self): # Test that we can pickle various objects item = Message(folder=self.account.inbox, subject='XXX', categories=self.categories).save() attachment = FileAttachment(name='pickle_me.txt', content=b'') for o in ( FaultTolerance(max_wait=3600), self.account.protocol, attachment, self.account.root, self.account.inbox, self.account, item, ): with self.subTest(o=o): pickled_o = pickle.dumps(o) unpickled_o = pickle.loads(pickled_o) self.assertIsInstance(unpickled_o, type(o)) if not isinstance(o, (Account, Protocol, FaultTolerance)): # __eq__ is not defined on some classes self.assertEqual(o, unpickled_o)
def test_attachment_failure(self): att1 = FileAttachment(name="my_file_1.txt", content="Hello from unicode æøå".encode("utf-8")) att1.attachment_id = "XXX" with self.assertRaises(ValueError) as e: att1.attach() self.assertEqual(e.exception.args[0], "This attachment has already been created") att1.attachment_id = None with self.assertRaises(ValueError) as e: att1.attach() self.assertEqual(e.exception.args[0], "Parent item None must have an account") att1.parent_item = Item() with self.assertRaises(ValueError) as e: att1.attach() self.assertEqual(e.exception.args[0], "Parent item Item(attachments=[]) must have an account") att1.parent_item = None with self.assertRaises(ValueError) as e: att1.detach() self.assertEqual(e.exception.args[0], "This attachment has not been created") att1.attachment_id = "XXX" with self.assertRaises(ValueError) as e: att1.detach() self.assertEqual(e.exception.args[0], "Parent item None must have an account") att1.parent_item = Item() with self.assertRaises(ValueError) as e: att1.detach() self.assertEqual(e.exception.args[0], "Parent item Item(attachments=[]) must have an account") att1.parent_item = "XXX" with self.assertRaises(TypeError) as e: att1.clean() self.assertEqual( e.exception.args[0], "'parent_item' 'XXX' must be of type <class 'exchangelib.items.item.Item'>" ) with self.assertRaises(ValueError) as e: Message(attachments=[att1]) self.assertIn("must point to this item", e.exception.args[0]) att1.parent_item = None att1.attachment_id = None
def order_by(self, *args): # Return a list of emails return [Message(), Message(), Message(), Message(), Message()]
def order_by(self, *args): return [Message(), Message(), Message(), Message(), Message()]
raw_response = RAW_RESPONSES[command_name] mocker.patch.object(ExpandGroup, "__init__", return_value=None) mocker.patch.object(ExpandGroup, "call", return_value=raw_response) client = self.MockClient() res = get_expanded_group( client, email_address="*****@*****.**" ) actual_ec = res[1] assert expected == actual_ec MESSAGES = [ Message(subject='message1', message_id='message1', text_body='Hello World', body='message1', datetime_received=EWSDateTime(2021, 7, 14, 13, 00, 00, tzinfo=EWSTimeZone(key='UTC')), datetime_sent=EWSDateTime(2021, 7, 14, 13, 00, 00, tzinfo=EWSTimeZone(key='UTC')), datetime_created=EWSDateTime(2021, 7, 14, 13, 00, 00, tzinfo=EWSTimeZone(key='UTC')) ), Message(subject='message2', message_id='message2', text_body='Hello World', body='message2', datetime_received=EWSDateTime(2021, 7, 14, 13, 9, 00, tzinfo=EWSTimeZone(key='UTC')), datetime_sent=EWSDateTime(2021, 7, 14, 13, 9, 00, tzinfo=EWSTimeZone(key='UTC')), datetime_created=EWSDateTime(2021, 7, 14, 13, 9, 00, tzinfo=EWSTimeZone(key='UTC')) ), Message(subject='message3', message_id='message3', text_body='Hello World', body='message3',
def sendRelease(container, transaction, driver, account): print(container) driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector("frame[src='topnavframe.asp']")) driver.find_element_by_css_selector( 'a[href*="MenuNavFrame.asp?MenuID=5"').click() driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='MenuNavFrame.asp?MenuID=10']")) driver.find_element_by_css_selector( 'a[href*="inventory/udsearch.asp"').click() failed = True while failed: try: driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='udSearchForm.asp?func=']")) failed = False except: pass elem = driver.find_element_by_name("unitprefix") elem.clear() elem.send_keys(container[:4]) elem = driver.find_element_by_name("unitnumber") elem.clear() elem.send_keys(container[4:11]) driver.find_element_by_css_selector( "Input[class='Button'][name='Submit']").click() # driver.switch_to_default_content() # driver.switch_to_frame(driver.find_element_by_css_selector("frame[src='portals/portal.asp']")) # # frame = driver.find_element_by_css_selector("frame[src='udSearchResult.asp']") # driver.switch_to_frame(driver.find_element_by_css_selector("frame[src='udSearchResult.asp']")) # wait = WebDriverWait(driver, 10) # wait.until(lambda driver: "Your query did not return any results" in driver.page_source or # EC.element_to_be_clickable(driver.find_element_by_css_selector("a[href*='unitDisposition.asp?eqid']"))) found = False while not found: try: # print(driver.page_source) driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='udSearchResult.asp']")) if ("Your query did not return any results" in driver.page_source): found = True driver.implicitly_wait(0) driver.find_element_by_css_selector( "a[href*='unitDisposition.asp?eqid']") found = True driver.implicitly_wait(60) except: driver.implicitly_wait(60) if ("Your query did not return any results" in driver.page_source): driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='topnavframe.asp']")) driver.find_element_by_css_selector( 'a[href*="MenuNavFrame.asp?MenuID=1"').click() driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='MenuNavFrame.asp?MenuID=10']")) driver.find_element_by_css_selector( "a[href='Gate/VirtualArrive/VirtualArriveSearch.asp']").click() driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='VirtualArriveForm.asp']")) driver.find_element_by_id("1").send_keys(container[:4]) driver.find_element_by_id("2").send_keys(container[4:11]) driver.find_element_by_css_selector( "Input[class='Button'][name='Submit']").click() found = False while not found: try: driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='VirtualArriveResult.asp']")) if ("Your query did not return any results" in driver.page_source): found = True driver.implicitly_wait(0) driver.find_element_by_css_selector( "a[href*='javascript:EditVirtualArrive(']") found = True driver.implicitly_wait(60) except: driver.implicitly_wait(60) if (not "Your query did not return any results" in driver.page_source): driver.find_element_by_css_selector( "a[href*='javascript:EditVirtualArrive(']").click() parentWindow = driver.current_window_handle handles = driver.window_handles for windowHandle in handles: if (not windowHandle == parentWindow): driver.switch_to.window(windowHandle) elem = driver.find_element_by_id("CkbCR") # try: # eqcomments if (elem.get_attribute("checked") == "true"): driver.find_element_by_id("CkbCR").click() driver.find_element_by_name("eqcomments").send_keys( "\n" + transaction) elem = driver.find_element_by_name("bkg_nbr_dof") if (elem.get_attribute("value") == ""): elem.send_keys("import") elem1 = Select(driver.find_element_by_name("Line")) elem2 = Select(driver.find_element_by_name("lineid")) try: if (elem1.first_selected_option.text == ""): elem1.select_by_visible_text( elem2.first_selected_option.text) except: elem1.select_by_visible_text( elem2.first_selected_option.text) if driver.find_element_by_name( "cargo_weight").get_attribute("value") == "": driver.find_element_by_name( "cargo_weight").send_keys("0") Select(driver.find_element_by_name( "ddWeightUnits")).select_by_visible_text("Kgs") driver.find_element_by_css_selector( "Input[class='Button'][name='Submit']").click() wait = WebDriverWait(driver, 10) wait.until( lambda driver: "Your information has been saved." in driver.page_source) driver.close() driver.switch_to.window(parentWindow) else: driver.find_element_by_css_selector( "a[href*='unitDisposition.asp?eqid']").click() driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) elem = driver.find_element_by_css_selector( "input[name='crelease'][value='1']") if elem.get_attribute("checked") != "true": elem.click() driver.find_element_by_name("comments").send_keys("\n" + transaction) driver.find_element_by_css_selector( "Input[class='Button'][name='Submit']").click() if driver.find_element_by_css_selector( "input[name='lfd']").get_attribute("value") == "": m = Message( account=account, subject='Missing LFD for container: ' + container, body='Missing LFD for container: ' + container + "\n\n\nTHIS IS AN AUTOMATED MESSAGE, DO NOT REPLY", to_recipients=[ Mailbox(email_address='*****@*****.**'), Mailbox(email_address='*****@*****.**'), ]) m.send() return True
top.geometry('%dx%d+%d+%d' % (w, h, x, y)) top.update() credentials = Credentials( username='******', # Or [email protected] for O365 password='******') account = Account(primary_smtp_address='*****@*****.**', credentials=credentials, autodiscover=True, access_type=DELEGATE) yardAccount = Account(primary_smtp_address='*****@*****.**', credentials=credentials, autodiscover=True, access_type=DELEGATE) done = [] tz = EWSTimeZone.localzone() Message.register('flag', Flag) top.after(0, doStuff, credentials, yardAccount, account, done) top.mainloop() # print("quitting") # sleep(2) # print("beofre") # try: # # driver.close() # driver.quit() # except: # print(exc_info()) # print("aftr") # sleep(10) # pyinstaller "C:\Users\ssleep\workspace\RNS Releaser\Automator\__init__.py" --distpath "J:\Spencer\RNS Releaser" -y
def sendRelease(container, driver, account): success = True print(container) driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector("frame[src='topnavframe.asp']")) driver.find_element_by_css_selector( 'a[href*="MenuNavFrame.asp?MenuID=5"').click() driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='MenuNavFrame.asp?MenuID=10']")) driver.find_element_by_css_selector( 'a[href*="inventory/udsearch.asp"').click() failed = True while failed: try: driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='udSearchForm.asp?func=']")) failed = False except: pass elem = driver.find_element_by_name("unitprefix") elem.clear() elem.send_keys(container[:4]) elem = driver.find_element_by_name("unitnumber") elem.clear() elem.send_keys(container[4:11]) driver.find_element_by_css_selector( "Input[class='Button'][name='Submit']").click() # driver.switch_to_default_content() # driver.switch_to_frame(driver.find_element_by_css_selector("frame[src='portals/portal.asp']")) # # frame = driver.find_element_by_css_selector("frame[src='udSearchResult.asp']") # driver.switch_to_frame(driver.find_element_by_css_selector("frame[src='udSearchResult.asp']")) # wait = WebDriverWait(driver, 10) # wait.until(lambda driver: "Your query did not return any results" in driver.page_source or # EC.element_to_be_clickable(driver.find_element_by_css_selector("a[href*='unitDisposition.asp?eqid']"))) found = False while not found: try: # print(driver.page_source) driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='udSearchResult.asp']")) if ("Your query did not return any results" in driver.page_source): found = True driver.implicitly_wait(0) driver.find_element_by_css_selector( "a[href*='unitDisposition.asp?eqid']") found = True driver.implicitly_wait(60) except: driver.implicitly_wait(60) if ("Your query did not return any results" in driver.page_source): driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='topnavframe.asp']")) driver.find_element_by_css_selector( 'a[href*="MenuNavFrame.asp?MenuID=1"').click() driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='MenuNavFrame.asp?MenuID=10']")) driver.find_element_by_css_selector( "a[href='Gate/VirtualArrive/VirtualArriveSearch.asp']").click() driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='VirtualArriveForm.asp']")) driver.find_element_by_id("1").send_keys(container[:4]) driver.find_element_by_id("2").send_keys(container[4:11]) driver.find_element_by_css_selector( "Input[class='Button'][name='Submit']").click() found = False while not found: try: driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='VirtualArriveResult.asp']")) if ("Your query did not return any results" in driver.page_source): found = True driver.implicitly_wait(0) driver.find_element_by_css_selector( "a[href*='javascript:EditVirtualArrive(']") found = True driver.implicitly_wait(60) except: driver.implicitly_wait(60) if (not "Your query did not return any results" in driver.page_source): driver.find_element_by_css_selector( "a[href*='javascript:EditVirtualArrive(']").click() parentWindow = driver.current_window_handle handles = driver.window_handles for windowHandle in handles: if (not windowHandle == parentWindow): driver.switch_to.window(windowHandle) if (driver.find_element_by_id("CkbFR").get_attribute( "checked") == "true"): driver.find_element_by_id("CkbFR").click() driver.find_element_by_css_selector( "Input[class='Button'][name='Submit']").click() wait = WebDriverWait(driver, 10) wait.until( lambda driver: "Your information has been saved." in driver.page_source) driver.close() driver.switch_to.window(parentWindow) else: print(container + " NOT IN SYSTEM") success = False else: driver.find_element_by_css_selector( "a[href*='unitDisposition.asp?eqid']").click() driver.switch_to_default_content() driver.switch_to_frame( driver.find_element_by_css_selector( "frame[src='portals/portal.asp']")) elem = driver.find_element_by_css_selector( "input[name='frelease'][value='1']") if elem.get_attribute("checked") != "true": elem.click() # driver.find_element_by_name("comments").send_keys("\n"+transaction) driver.find_element_by_css_selector( "Input[class='Button'][name='Submit']").click() if driver.find_element_by_css_selector( "input[name='lfd']").get_attribute("value") == "": m = Message( account=account, subject='Missing LFD for container: ' + container, body='Missing LFD for container: ' + container, to_recipients=[Mailbox(email_address='*****@*****.**')]) m.send() return success