def genMegaAccount(numAccounts=1): for i in range(numAccounts): session = GuerrillaMailSession() password = ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(10)) pre_email_count = len(session.get_email_list()) verify_link = subprocess.check_output( ["megatools", "reg", "-n", names.get_full_name(), "-e", session.email_address, "-p", password, "--register", "--scripted"]).decode("utf-8").replace("@LINK@\n", "{}") while pre_email_count == len(session.get_email_list()): sleep(1) verify_command = (verify_link.format( html.fromstring(session.get_email(session.get_email_list()[0].guid).body).xpath( "//a[contains(@href, 'confirm')]/@href")[0])).split() if "successfull" in subprocess.check_output(verify_command).decode("utf-8"): print(":".join([session.email_address, password]))
def MAIL_get_verification_link(self, mailSessionID=None, subjectPattern=None, linkPattern=r"", mailService="Guerrilla", timeout=10): import re if mailService == "Guerrilla": _mailSession = GuerrillaMailSession(mailSessionID) if timeout: from datetime import datetime start_time = datetime.now() while True: for mail in _mailSession.get_email_list(): if subjectPattern in mail.subject: fetch_mail = _mailSession.get_email(mail.guid) body = fetch_mail.body m = re.search(linkPattern, body) if m: link = m.group('veri_link') print("LINK FOUND: "+link) return link time.sleep(2) if timeout: current_time = datetime.now() interval = current_time - start_time if interval > timeout: print("{{MAIL_get_verification_link}} TIMEOUT!!!") return None return None
def read_email(email): s = GuerrillaMailSession() s.set_email_address(email) print(s.get_session_state()) for email in s.get_email_list(): if email.subject == "Poliigon: Email Verification": print("Got email") body = s.get_email(s.get_email_list()[0].guid).body link = body[body.index("https://www.poliigon.com" ):body.index("https://www.poliigon.com") + 71] return link
def MAIL_get_verification_link(self, mailSessionID=None, subjectPattern=None, linkPattern=r"", mailService="Guerrilla"): import re if mailService == "Guerrilla": _mailSession = GuerrillaMailSession(mailSessionID) while True: for mail in _mailSession.get_email_list(): if subjectPattern in mail.subject: fetch_mail = _mailSession.get_email(mail.guid) body = fetch_mail.body print(body) m = re.search(linkPattern, body) if m: link = m.group('veri_link') print("LINK FOUND: " + link) return link time.sleep(2) return None
class GuerrillaMailSessionTest(TestCase): def setup_mocks(self, GuerrillaMailClient, **kwargs): self.mock_client = Mock() GuerrillaMailClient.return_value = self.mock_client self.session = GuerrillaMailSession() def test_get_email_state_should_extract_email_address_from_response(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': '*****@*****.**', 'sid_token': 1} email_address = self.session.get_session_state() expect(email_address).to.equal({'email_address': '*****@*****.**'}) def test_get_email_state_should_call_client(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': '', 'sid_token': 1} self.session.get_session_state() self.mock_client.get_email_address.assert_called_once_with(session_id=None) def test_get_session_state_should_call_client_with_session_id_when_set(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': ''} self.session.session_id = 1 self.session.get_session_state() self.mock_client.get_email_address.assert_called_once_with(session_id=1) def test_get_session_state_should_update_session_id_when_included_in_response(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': '', 'sid_token': 1} assert self.session.session_id == None self.session.get_session_state() expect(self.session.session_id).to.equal(1) def test_get_session_state_should_not_update_session_id_when_not_included_in_response(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': ''} self.session.session_id = 1 self.session.get_session_state() expect(self.session.session_id).to.equal(1) def test_get_session_state_should_update_email_timestamp(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': '', 'email_timestamp': 1234, 'sid_token': 1} assert self.session.email_timestamp == 0 self.session.get_session_state() expect(self.session.email_timestamp).to.equal(1234) def test_get_session_state_should_update_email_address(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = { 'email_addr': '*****@*****.**', 'email_timestamp': 1234, 'sid_token': 1, } assert self.session.email_timestamp == 0 self.session.get_session_state() expect(self.session.email_address).to.equal('*****@*****.**') def test_get_session_state_should_use_cached_data_when_available_and_current(self, **kwargs): self.setup_mocks(**kwargs) self.session.session_id = 1 self.session.email_address = '*****@*****.**' self.session.email_timestamp = current_timestamp() self.session.get_session_state() expect(self.mock_client.get_email_address.called).to.equal(False) expect(self.mock_client.set_email_address.called).to.equal(False) def test_set_email_address_should_return_none(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': '*****@*****.**'} result = self.session.set_email_address('newaddr') expect(result).to.be.none def test_set_email_address_should_call_client(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': ''} self.session.set_email_address('newaddr') self.mock_client.set_email_address.assert_called_once_with(session_id=None, address_local_part='newaddr') def test_set_email_address_should_call_client_with_session_id_when_set(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': ''} self.session.session_id = 1 self.session.set_email_address('newaddr') self.mock_client.set_email_address.assert_called_once_with(session_id=1, address_local_part='newaddr') def test_set_email_address_should_update_session_id_when_included_in_response(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': '', 'sid_token': 1} assert self.session.session_id == None self.session.set_email_address('newaddr') expect(self.session.session_id).to.equal(1) def test_set_email_address_should_not_update_session_id_when_not_included_in_response(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': ''} self.session.session_id = 1 self.session.set_email_address('newaddr') expect(self.session.session_id).to.equal(1) def test_set_email_address_should_update_email_timestamp(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': '', 'email_timestamp': 1234} assert self.session.email_timestamp == 0 self.session.set_email_address('newaddr') expect(self.session.email_timestamp).to.equal(1234) def test_set_email_address_should_update_email_address(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': '*****@*****.**', 'email_timestamp': 1234} assert self.session.email_timestamp == 0 self.session.set_email_address('newaddr') expect(self.session.email_address).to.equal('*****@*****.**') def test_get_email_list_should_extract_response_list(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() email_list = self.session.get_email_list() expect(email_list).to.have.length_of(0) def test_get_email_list_should_create_mail_instances_from_response_list(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = { 'list': [{ 'mail_id': '1', 'mail_subject': 'Hello', 'mail_from': '*****@*****.**', 'mail_timestamp': '1392501749', 'mail_read': '0', 'mail_exerpt': 'Hi there....', }] } self.session.session_id = 1 self.session.email_timestamp = current_timestamp() email_list = self.session.get_email_list() email = email_list[0] expect(email_list).to.have.length_of(1) expect(email).to.have.property('guid').with_value.being.equal('1') expect(email).to.have.property('subject').with_value.being.equal('Hello') expect(email).to.have.property('sender').with_value.being.equal('*****@*****.**') expect(email).to.have.property('datetime').with_value.being.equal(datetime(2014, 2, 15, 22, 2, 29, tzinfo=utc)) expect(email).to.have.property('read').with_value.being.false expect(email).to.have.property('exerpt').with_value.being.equal('Hi there....') def test_get_email_list_should_call_client(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() self.session.get_email_list() self.mock_client.get_email_list.assert_called_once_with(session_id=1, offset=0) def test_get_email_list_should_call_client_with_session_id_when_set(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() self.session.get_email_list() self.mock_client.get_email_list.assert_called_once_with(session_id=1, offset=0) def test_get_email_list_should_update_session_id_when_included_in_response(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': [], 'sid_token': 1} self.session.session_id = 0 self.session.email_timestamp = current_timestamp() self.session.get_email_list() expect(self.session.session_id).to.equal(1) def test_get_email_list_should_not_update_session_id_when_not_included_in_response(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() self.session.get_email_list() expect(self.session.session_id).to.equal(1) def test_get_email_list_should_not_invoke_get_address_when_session_id_set_and_not_expired(self, **kwargs): self.setup_mocks(**kwargs) self.session.session_id = 1 self.session.email_timestamp = current_timestamp() self.mock_client.get_email_list.return_value = {'list': []} self.session.get_email_list() expect(self.mock_client.get_email_address.called).to.equal(False) def test_get_email_list_should_first_create_session_when_session_id_not_set(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.mock_client.get_email_address.return_value = {'sid_token': '1', 'email_addr': ''} self.session.email_timestamp = current_timestamp() assert self.session.session_id == None self.session.get_email_list() expect(self.session.session_id).to.equal('1') self.mock_client.get_email_list.assert_called_once_with(session_id='1', offset=0) def test_get_email_list_should_first_create_session_and_reuse_address_when_session_id_not_set(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.mock_client.set_email_address.return_value = {'sid_token': '1', 'email_addr': ''} self.session.email_timestamp = current_timestamp() self.session.email_address = '*****@*****.**' assert self.session.session_id == None self.session.get_email_list() expect(self.session.session_id).to.equal('1') self.mock_client.get_email_list.assert_called_once_with(session_id='1', offset=0) def test_get_email_list_should_fail_when_session_cannot_be_obtained(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': ''} assert self.session.session_id == None expect(self.session.get_email_list).when.called.to.throw(GuerrillaMailException) expect(self.mock_client.get_email_list.called).to.equal(False) def test_get_email_list_should_refresh_session_when_email_expired(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.mock_client.get_email_address.return_value = {'email_addr': '', 'sid_token': '2', 'email_timestamp': 1234} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() - 3600 self.session.get_email_list() expect(self.session.session_id).to.equal('2') expect(self.session.email_timestamp).to.equal(1234) self.mock_client.get_email_list.assert_called_once_with(session_id='2', offset=0) def test_get_email_list_should_refresh_session_and_reuse_address_when_email_expired(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.mock_client.set_email_address.return_value = {'email_addr': '', 'sid_token': '2', 'email_timestamp': 1234} self.session.session_id = 1 self.session.email_address = '*****@*****.**' self.session.email_timestamp = current_timestamp() - 3600 self.session.get_email_list() expect(self.session.session_id).to.equal('2') expect(self.session.email_timestamp).to.equal(1234) self.mock_client.get_email_list.assert_called_once_with(session_id='2', offset=0) def test_get_email_list_should_not_refresh_session_when_email_not_expired(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() - 3590 self.session.get_email_list() expect(self.mock_client.get_email_address.called).to.equal(False) def test_get_email_should_create_mail_instance_from_client_response_data(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = { 'mail_id': '1', 'mail_subject': 'Hello', 'mail_from': '*****@*****.**', 'mail_timestamp': '1392501749', 'mail_read': '0', 'mail_exerpt': 'Hi there....', 'mail_body': 'Hi there partner', } email = self.session.get_email('123') expect(email).to.have.property('guid').with_value.being.equal('1') expect(email).to.have.property('subject').with_value.being.equal('Hello') expect(email).to.have.property('sender').with_value.being.equal('*****@*****.**') expect(email).to.have.property('datetime').with_value.being.equal(datetime(2014, 2, 15, 22, 2, 29, tzinfo=utc)) expect(email).to.have.property('read').with_value.being.false expect(email).to.have.property('exerpt').with_value.being.equal('Hi there....') expect(email).to.have.property('body').with_value.being.equal('Hi there partner') def test_get_email_should_call_client(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = {} self.session.get_email('123') self.mock_client.get_email.assert_called_once_with(email_id='123', session_id=None) def test_get_email_should_call_client_with_session_id_when_set(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = {} self.session.session_id = 1 self.session.get_email('123') self.mock_client.get_email.assert_called_once_with(email_id='123', session_id=1) def test_get_email_should_update_session_id_when_included_in_response(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = {'sid_token': 1} assert self.session.session_id == None self.session.get_email('123') expect(self.session.session_id).to.equal(1) def test_get_email_should_not_update_session_id_when_not_included_in_response(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = {} self.session.session_id = 1 self.session.get_email('123') expect(self.session.session_id).to.equal(1)
class GuerrillaMailApi(object): """ Api for using Guerrilla Mail. """ def __init__(self, user_name): self.session = GuerrillaMailSession() self.user_name = user_name self.session.set_email_address(self.user_name) self.user_email = self.session.get_session_state()['email_address'] def get_email_text(self, pattern): """ Get email text from GuerrillaMail server. Checks the latest email from the inbox and searches for pattern in it. If pattern is found then email's body is returned otherwise exception is raised. Also, if latest email is not from MIT, it raises exception. Checks GuerrillaMail server for email at the intervals of 5 seconds. If the email is not found after 40 seconds then exception is raised. Arguments: pattern(str): Pattern to be found in the email's body. Returns: str: Email's body. """ email_text = "" t_end = time.time() + TIME_OUT_LIMIT # Run the loop for a pre defined time time.sleep(INITIAL_WAIT_TIME) while time.time() < t_end: try: # Check that mail box is not empty email_list = self.session.get_email_list() if not email_list: # raise an exception that waits 3 seconds # before restarting loop raise MailException # Get the email id of last email in the inbox email_id = email_list[0].guid # if last email is not sent by MIT raise the exception email = self.session.get_email(email_id) if email.sender != EMAIL_SENDER_ACCOUNT: raise MailException # Fetch the email text and stop the loop email_text = email.body if pattern not in email_text: raise MailException break except MailException: time.sleep(WAIT_TIME) if email_text: return email_text else: raise MailException('No Email from ' + EMAIL_SENDER_ACCOUNT) def get_target_url_from_text(self, url_matching_string, text_chunk): """ Search and return the target url from text chunk, the url is searched on the basis of partial string embedded in url Args: url_matching_string: text_chunk: Returns: target url: """ pattern = r"(?P<url>http[s]?://[^\s\"]+(/{}/)[^\s\"]+)".format( url_matching_string ) regex_result = re.search(pattern, text_chunk) if regex_result: target_url = regex_result.group("url") return target_url.rstrip('.') else: return 'Target URL not found in the text' def get_url_from_email(self, matching_string): """ Connect to the email client Get text of target email fetch desired url from the email text Args: user_email: matching_string: Returns: target url: """ email_text = self.get_email_text( self.user_email ) return self.get_target_url_from_text(matching_string, email_text)
class GuerrillaMailApi: """ Api for using Guerrilla Mail. """ def __init__(self, user_name): self.session = GuerrillaMailSession() self.user_name = user_name self.session.set_email_address(self.user_name) self.user_email = self.session.get_session_state()['email_address'] def get_email_text(self, pattern): """ Get email text from GuerrillaMail server. Checks the latest email from the inbox and searches for pattern in it. If pattern is found then email's body is returned otherwise exception is raised. Also, if latest email is not from MIT, it raises exception. Checks GuerrillaMail server for email at the intervals of 5 seconds. If the email is not found after 40 seconds then exception is raised. Arguments: pattern(str): Pattern to be found in the email's body. Returns: str: Email's body. """ email_text = "" t_end = time.time() + TIME_OUT_LIMIT # Run the loop for a pre defined time time.sleep(INITIAL_WAIT_TIME) while time.time() < t_end: try: # Check that mail box is not empty email_list = self.session.get_email_list() if not email_list: # raise an exception that waits 3 seconds # before restarting loop raise MailException # Get the email id of last email in the inbox email_id = email_list[0].guid # if last email is not sent by MIT raise the exception email = self.session.get_email(email_id) if email.sender != EMAIL_SENDER_ACCOUNT: raise MailException # Fetch the email text and stop the loop email_text = email.body if pattern not in email_text: raise MailException break except MailException: time.sleep(WAIT_TIME) if email_text: return email_text raise MailException('No Email from ' + EMAIL_SENDER_ACCOUNT) def get_url_from_email(self, matching_string): """ Connect to the email client Get text of target email fetch desired url from the email text Args: matching_string: Returns: target url: """ email_text = self.get_email_text(self.user_email) return get_target_url_from_text(matching_string, email_text)
print('checking guerillamail account {} every {} seconds (CTRL-C to quit)'.format(account, delay)) session = GuerrillaMailSession(email_address=account) directory = 'email' try: os.makedirs(directory) except OSError as exc: if exc.errno == errno.EEXIST and os.path.isdir(directory): pass else: raise while True: sys.stdout.write('.') sys.stdout.flush() for item in session.get_email_list(): email = session.get_email(item.guid) filename = 'email/{}.txt'.format(email.guid) if not os.path.isfile(filename): print('\nnew email from {}'.format(email.sender)) file = open(filename, 'w') file.write(u' '.join(( email.sender, '\n', email.datetime.strftime("%B %d, %Y"), '\n', email.subject, '\n\n', email.body )).encode('utf-8').strip()) file.close() sleep(delay)
class GuerrillaMailSessionTest(TestCase): def setup_mocks(self, GuerrillaMailClient, **kwargs): self.mock_client = Mock() GuerrillaMailClient.return_value = self.mock_client self.session = GuerrillaMailSession() def test_get_email_state_should_extract_email_address_from_response( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = { 'email_addr': '*****@*****.**', 'sid_token': 1 } email_address = self.session.get_session_state() expect(email_address).to.equal({'email_address': '*****@*****.**'}) def test_get_email_state_should_call_client(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = { 'email_addr': '', 'sid_token': 1 } self.session.get_session_state() self.mock_client.get_email_address.assert_called_once_with( session_id=None) def test_get_session_state_should_call_client_with_session_id_when_set( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': ''} self.session.session_id = 1 self.session.get_session_state() self.mock_client.get_email_address.assert_called_once_with( session_id=1) def test_get_session_state_should_update_session_id_when_included_in_response( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = { 'email_addr': '', 'sid_token': 1 } assert self.session.session_id == None self.session.get_session_state() expect(self.session.session_id).to.equal(1) def test_get_session_state_should_not_update_session_id_when_not_included_in_response( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': ''} self.session.session_id = 1 self.session.get_session_state() expect(self.session.session_id).to.equal(1) def test_get_session_state_should_update_email_timestamp(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = { 'email_addr': '', 'email_timestamp': 1234, 'sid_token': 1 } assert self.session.email_timestamp == 0 self.session.get_session_state() expect(self.session.email_timestamp).to.equal(1234) def test_get_session_state_should_update_email_address(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = { 'email_addr': '*****@*****.**', 'email_timestamp': 1234, 'sid_token': 1, } assert self.session.email_timestamp == 0 self.session.get_session_state() expect(self.session.email_address).to.equal('*****@*****.**') def test_get_session_state_should_use_cached_data_when_available_and_current( self, **kwargs): self.setup_mocks(**kwargs) self.session.session_id = 1 self.session.email_address = '*****@*****.**' self.session.email_timestamp = current_timestamp() self.session.get_session_state() expect(self.mock_client.get_email_address.called).to.equal(False) expect(self.mock_client.set_email_address.called).to.equal(False) def test_set_email_address_should_return_none(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = { 'email_addr': '*****@*****.**' } result = self.session.set_email_address('newaddr') expect(result).to.be.none def test_set_email_address_should_call_client(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': ''} self.session.set_email_address('newaddr') self.mock_client.set_email_address.assert_called_once_with( session_id=None, address_local_part='newaddr') def test_set_email_address_should_call_client_with_session_id_when_set( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': ''} self.session.session_id = 1 self.session.set_email_address('newaddr') self.mock_client.set_email_address.assert_called_once_with( session_id=1, address_local_part='newaddr') def test_set_email_address_should_update_session_id_when_included_in_response( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = { 'email_addr': '', 'sid_token': 1 } assert self.session.session_id == None self.session.set_email_address('newaddr') expect(self.session.session_id).to.equal(1) def test_set_email_address_should_not_update_session_id_when_not_included_in_response( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = {'email_addr': ''} self.session.session_id = 1 self.session.set_email_address('newaddr') expect(self.session.session_id).to.equal(1) def test_set_email_address_should_update_email_timestamp(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = { 'email_addr': '', 'email_timestamp': 1234 } assert self.session.email_timestamp == 0 self.session.set_email_address('newaddr') expect(self.session.email_timestamp).to.equal(1234) def test_set_email_address_should_update_email_address(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.set_email_address.return_value = { 'email_addr': '*****@*****.**', 'email_timestamp': 1234 } assert self.session.email_timestamp == 0 self.session.set_email_address('newaddr') expect(self.session.email_address).to.equal('*****@*****.**') def test_get_email_list_should_extract_response_list(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() email_list = self.session.get_email_list() expect(email_list).to.have.length_of(0) def test_get_email_list_should_create_mail_instances_from_response_list( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = { 'list': [{ 'mail_id': '1', 'mail_subject': 'Hello', 'mail_from': '*****@*****.**', 'mail_timestamp': '1392501749', 'mail_read': '0', 'mail_exerpt': 'Hi there....', }] } self.session.session_id = 1 self.session.email_timestamp = current_timestamp() email_list = self.session.get_email_list() email = email_list[0] expect(email_list).to.have.length_of(1) expect(email).to.have.property('guid').with_value.being.equal('1') expect(email).to.have.property('subject').with_value.being.equal( 'Hello') expect(email).to.have.property('sender').with_value.being.equal( '*****@*****.**') expect(email).to.have.property('datetime').with_value.being.equal( datetime(2014, 2, 15, 22, 2, 29, tzinfo=utc)) expect(email).to.have.property('read').with_value.being.false expect(email).to.have.property('exerpt').with_value.being.equal( 'Hi there....') def test_get_email_list_should_call_client(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() self.session.get_email_list() self.mock_client.get_email_list.assert_called_once_with(session_id=1, offset=0) def test_get_email_list_should_call_client_with_session_id_when_set( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() self.session.get_email_list() self.mock_client.get_email_list.assert_called_once_with(session_id=1, offset=0) def test_get_email_list_should_update_session_id_when_included_in_response( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = { 'list': [], 'sid_token': 1 } self.session.session_id = 0 self.session.email_timestamp = current_timestamp() self.session.get_email_list() expect(self.session.session_id).to.equal(1) def test_get_email_list_should_not_update_session_id_when_not_included_in_response( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() self.session.get_email_list() expect(self.session.session_id).to.equal(1) def test_get_email_list_should_not_invoke_get_address_when_session_id_set_and_not_expired( self, **kwargs): self.setup_mocks(**kwargs) self.session.session_id = 1 self.session.email_timestamp = current_timestamp() self.mock_client.get_email_list.return_value = {'list': []} self.session.get_email_list() expect(self.mock_client.get_email_address.called).to.equal(False) def test_get_email_list_should_first_create_session_when_session_id_not_set( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.mock_client.get_email_address.return_value = { 'sid_token': '1', 'email_addr': '' } self.session.email_timestamp = current_timestamp() assert self.session.session_id == None self.session.get_email_list() expect(self.session.session_id).to.equal('1') self.mock_client.get_email_list.assert_called_once_with(session_id='1', offset=0) def test_get_email_list_should_first_create_session_and_reuse_address_when_session_id_not_set( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.mock_client.set_email_address.return_value = { 'sid_token': '1', 'email_addr': '' } self.session.email_timestamp = current_timestamp() self.session.email_address = '*****@*****.**' assert self.session.session_id == None self.session.get_email_list() expect(self.session.session_id).to.equal('1') self.mock_client.get_email_list.assert_called_once_with(session_id='1', offset=0) def test_get_email_list_should_fail_when_session_cannot_be_obtained( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_address.return_value = {'email_addr': ''} assert self.session.session_id == None expect(self.session.get_email_list).when.called.to.throw( GuerrillaMailException) expect(self.mock_client.get_email_list.called).to.equal(False) def test_get_email_list_should_refresh_session_when_email_expired( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.mock_client.get_email_address.return_value = { 'email_addr': '', 'sid_token': '2', 'email_timestamp': 1234 } self.session.session_id = 1 self.session.email_timestamp = current_timestamp() - 3600 self.session.get_email_list() expect(self.session.session_id).to.equal('2') expect(self.session.email_timestamp).to.equal(1234) self.mock_client.get_email_list.assert_called_once_with(session_id='2', offset=0) def test_get_email_list_should_refresh_session_and_reuse_address_when_email_expired( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.mock_client.set_email_address.return_value = { 'email_addr': '', 'sid_token': '2', 'email_timestamp': 1234 } self.session.session_id = 1 self.session.email_address = '*****@*****.**' self.session.email_timestamp = current_timestamp() - 3600 self.session.get_email_list() expect(self.session.session_id).to.equal('2') expect(self.session.email_timestamp).to.equal(1234) self.mock_client.get_email_list.assert_called_once_with(session_id='2', offset=0) def test_get_email_list_should_not_refresh_session_when_email_not_expired( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email_list.return_value = {'list': []} self.session.session_id = 1 self.session.email_timestamp = current_timestamp() - 3590 self.session.get_email_list() expect(self.mock_client.get_email_address.called).to.equal(False) def test_get_email_should_create_mail_instance_from_client_response_data( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = { 'mail_id': '1', 'mail_subject': 'Hello', 'mail_from': '*****@*****.**', 'mail_timestamp': '1392501749', 'mail_read': '0', 'mail_exerpt': 'Hi there....', 'mail_body': 'Hi there partner', } email = self.session.get_email('123') expect(email).to.have.property('guid').with_value.being.equal('1') expect(email).to.have.property('subject').with_value.being.equal( 'Hello') expect(email).to.have.property('sender').with_value.being.equal( '*****@*****.**') expect(email).to.have.property('datetime').with_value.being.equal( datetime(2014, 2, 15, 22, 2, 29, tzinfo=utc)) expect(email).to.have.property('read').with_value.being.false expect(email).to.have.property('exerpt').with_value.being.equal( 'Hi there....') expect(email).to.have.property('body').with_value.being.equal( 'Hi there partner') def test_get_email_should_call_client(self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = {} self.session.get_email('123') self.mock_client.get_email.assert_called_once_with(email_id='123', session_id=None) def test_get_email_should_call_client_with_session_id_when_set( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = {} self.session.session_id = 1 self.session.get_email('123') self.mock_client.get_email.assert_called_once_with(email_id='123', session_id=1) def test_get_email_should_update_session_id_when_included_in_response( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = {'sid_token': 1} assert self.session.session_id == None self.session.get_email('123') expect(self.session.session_id).to.equal(1) def test_get_email_should_not_update_session_id_when_not_included_in_response( self, **kwargs): self.setup_mocks(**kwargs) self.mock_client.get_email.return_value = {} self.session.session_id = 1 self.session.get_email('123') expect(self.session.session_id).to.equal(1)
class Silverback(object): full_path = os.path.realpath(__file__) directory = os.path.dirname(full_path) data_folder = directory + "//guerrilla_data" list_of_names_file = directory + "/nounlist.txt" def __init__(self, addr="*****@*****.**", random_name=False): if not random_name: self.session = GuerrillaMailSession(email_address=addr) else: r_addr = self.get_random_name() print(r_addr) self.session = GuerrillaMailSession(email_address=r_addr) def get_random_name(self): random_noun = random.choice(open( self.list_of_names_file).readlines())[0:-1] return random_noun + "@sharklasers.com" def print_body(self, offset=0): print( self.session.get_email( self.session.get_email_list()[offset].guid).body) def get_all_mail(self): mails = [] for g in self.session.get_email_list(): mails.append(self.session.get_email(g.guid)) return mails def clean_text(self, rgx_list, text): new_text = text for rgx_match in rgx_list: new_text = re.sub(rgx_match, ' ', new_text) return new_text def get_current_file(self): n = datetime.datetime.now() d = str(n.month) + "-" + str(n.day) + "-" + str(n.year) return self.data_folder + r"/" + d + ".csv" def search_and_write(self): mails = self.get_all_mail() counter = 0 pattern = "([\w]+[\w\s]*)(?=[\'" "\s]*<{1})" name_of_writing_file = self.get_current_file() with open(name_of_writing_file, 'a', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file, delimiter=';') for item in mails: f = item.sender s = item.subject j = self.clean_text(["<(.*?)>", "(\r\n|\r|\n)"], item.body) if s and f and j: if not f == "*****@*****.**": writer.writerow([f, s, j]) counter += 3 print("wrote %i pieces of data to csv" % counter)
from guerrillamail import GuerrillaMailSession, GuerrillaMailClient session = GuerrillaMailSession() print session.get_session_state()['email_address'] print session.get_email_list()[0].guid print session.get_email(1).guid client = GuerrillaMailClient() email_data = client.get_email(1) print email_data.get('mail_from')
class GuerrillaMailApi(object): """ Api for using Guerrilla Mail. """ def __init__(self, user_name): self.session = GuerrillaMailSession() self.user_name = user_name self.session.set_email_address(self.user_name) self.user_email = self.session.get_session_state()['email_address'] def get_email_text(self, pattern): """ Get email text from GuerrillaMail server. Checks the latest email from the inbox and searches for pattern in it. If pattern is found then email's body is returned otherwise exception is raised. Also, if latest email is not from MIT, it raises exception. Checks GuerrillaMail server for email at the intervals of 5 seconds. If the email is not found after 40 seconds then exception is raised. Arguments: pattern(str): Pattern to be found in the email's body. Returns: str: Email's body. """ email_text = "" t_end = time.time() + TIME_OUT_LIMIT # Run the loop for a pre defined time time.sleep(INITIAL_WAIT_TIME) while time.time() < t_end: try: # Check that mail box is not empty email_list = self.session.get_email_list() if not email_list: # raise an exception that waits 3 seconds # before restarting loop raise MailException # Get the email id of last email in the inbox email_id = email_list[0].guid # if last email is not sent by MIT raise the exception email = self.session.get_email(email_id) if email.sender != EMAIL_SENDER_ACCOUNT: raise MailException # Fetch the email text and stop the loop email_text = email.body if pattern not in email_text: raise MailException break except MailException: time.sleep(WAIT_TIME) if email_text: return email_text else: raise MailException('No Email from ' + EMAIL_SENDER_ACCOUNT) def get_url_from_email(self, matching_string): """ Connect to the email client Get text of target email fetch desired url from the email text Args: matching_string: Returns: target url: """ email_text = self.get_email_text( self.user_email ) return get_target_url_from_text(matching_string, email_text)