コード例 #1
0
ファイル: server_tests.py プロジェクト: talwrii/salmon
def test_relay_smtp(client_mock):
    relay = server.Relay("localhost", port=0)
    relay.deliver(test_mail_response_plain_text())
    assert_equal(client_mock.return_value.sendmail.call_count, 1)
    assert_equal(client_mock.return_value.starttls.call_count, 0)

    client_mock.reset_mock()
    relay = server.Relay("localhost", port=0, starttls=True)
    relay.deliver(test_mail_response_plain_text())
    assert_equal(client_mock.return_value.sendmail.call_count, 1)
    assert_equal(client_mock.return_value.starttls.call_count, 1)
コード例 #2
0
ファイル: server_tests.py プロジェクト: simhaonline/salmon
    def test_relay_smtp(self, client_mock):
        relay = server.Relay("localhost", port=0)
        relay.deliver(generate_mail(factory=mail.MailResponse, attachment=True))
        self.assertEqual(client_mock.return_value.sendmail.call_count, 1)
        self.assertEqual(client_mock.return_value.starttls.call_count, 0)

        client_mock.reset_mock()
        relay = server.Relay("localhost", port=0, starttls=True)
        relay.deliver(generate_mail(factory=mail.MailResponse, attachment=True))
        self.assertEqual(client_mock.return_value.sendmail.call_count, 1)
        self.assertEqual(client_mock.return_value.starttls.call_count, 1)
コード例 #3
0
ファイル: server_tests.py プロジェクト: talwrii/salmon
def test_Relay_asserts_ssl_options():
    """Relay raises an AssertionError if the ssl option is used in combination with starttls or lmtp"""
    with assert_raises(AssertionError):
        server.Relay("localhost", ssl=True, starttls=True)

    with assert_raises(AssertionError):
        server.Relay("localhost", ssl=True, lmtp=True)

    with assert_raises(AssertionError):
        server.Relay("localhost", ssl=True, starttls=True, lmtp=True)

    # no error
    server.Relay("localhost", starttls=True, lmtp=True)
コード例 #4
0
    def command(port,
                host,
                username=None,
                password=None,
                ssl=None,
                starttls=None,
                lmtp=None,
                sender=None,
                to=None,
                subject=None,
                body=None,
                attach=None):
        message = mail.MailResponse(From=sender,
                                    To=to,
                                    Subject=subject,
                                    Body=body)
        if attach:
            message.attach(attach)

        relay = server.Relay(host,
                             port=port,
                             username=username,
                             password=password,
                             ssl=ssl,
                             starttls=starttls,
                             lmtp=lmtp,
                             debug=False)
        relay.deliver(message)
コード例 #5
0
def send(port,
         host,
         username=None,
         password=None,
         ssl=None,
         starttls=None,
         lmtp=None,
         sender=None,
         to=None,
         subject=None,
         body=None,
         attach=None):
    """
    Sends an email to someone as a test message.
    See the sendmail command for a sendmail replacement.
    """
    message = mail.MailResponse(From=sender, To=to, Subject=subject, Body=body)
    if attach:
        message.attach(attach)

    relay = server.Relay(host,
                         port=port,
                         username=username,
                         password=password,
                         ssl=ssl,
                         starttls=starttls,
                         lmtp=lmtp,
                         debug=False)
    relay.deliver(message)
コード例 #6
0
def blast(inbox, host, port, lmtp, debug):
    """
    Given a Maildir, this command will go through each email
    and blast it at your server.  It does nothing to the message, so
    it will be real messages hitting your server, not cleansed ones.
    """
    try:
        inbox = mailbox.mbox(inbox, create=False)
    except (mailbox.Error, IOError):
        try:
            inbox = mailbox.Maildir(inbox, factory=None, create=False)
        except (mailbox.Error, IOError):
            raise click.ClickException(
                "{} does not exist or is not a valid MBox or Maildir".format(
                    inbox))

    relay = server.Relay(host, port=port, lmtp=lmtp, debug=debug)

    for key in inbox.keys():
        msgfile = inbox.get_file(key)
        msg = encoding.from_file(msgfile)
        try:
            relay.deliver(msg)
        except socket.error as exp:
            raise click.ClickException(str(exp))
        finally:
            msgfile.close()
コード例 #7
0
ファイル: server_tests.py プロジェクト: claytondaley/salmon
def test_relay_deliver():
    relay = server.Relay("localhost", port=8899)

    relay.deliver(test_mail_response_plain_text())
    relay.deliver(test_mail_response_html())
    relay.deliver(test_mail_response_html_and_plain_text())
    relay.deliver(test_mail_response_attachments())
コード例 #8
0
ファイル: server_tests.py プロジェクト: claytondaley/salmon
def test_relay_deliver_mx_hosts(DNS_mxlookup):
    DNS_mxlookup.return_value = [[100, "localhost"]]
    relay = server.Relay(None, port=8899)

    msg = test_mail_response_plain_text()
    msg['to'] = 'zedshaw@localhost'
    relay.deliver(msg)
    assert DNS_mxlookup.called
コード例 #9
0
ファイル: server_tests.py プロジェクト: simhaonline/salmon
    def test_relay_deliver_mx_hosts(self, client_mock, query):
        query.return_value = [Mock()]
        query.return_value[0].exchange = "localhost"
        relay = server.Relay(None, port=0)

        msg = generate_mail(factory=mail.MailResponse, attachment=True)
        msg['to'] = 'user@localhost'
        relay.deliver(msg)
        self.assertEqual(query.call_count, 1)
コード例 #10
0
ファイル: server_tests.py プロジェクト: talwrii/salmon
def test_relay_deliver_mx_hosts(client_mock, query):
    query.return_value = [Mock()]
    query.return_value[0].exchange = "localhost"
    relay = server.Relay(None, port=0)

    msg = test_mail_response_plain_text()
    msg['to'] = 'user@localhost'
    relay.deliver(msg)
    assert_equal(query.call_count, 1)
コード例 #11
0
ファイル: server_tests.py プロジェクト: mlalibs/salmon
def test_relay_deliver_mx_hosts(query):
    query.return_value = [Mock()]
    query.return_value[0].exchange = "localhost"
    relay = server.Relay(None, port=8899)

    msg = test_mail_response_plain_text()
    msg['to'] = 'user@localhost'
    relay.deliver(msg)
    assert query.called
コード例 #12
0
def sendmail(port, host, recipients, debug=False, lmtp=False):
    """
    Used as a testing sendmail replacement for use in programs
    like mutt as an MTA.  It reads the email to send on the stdin
    and then delivers it based on the port and host settings.
    """
    relay = server.Relay(host, port=port, debug=debug, lmtp=lmtp)
    data = sys.stdin.read()
    msg = mail.MailRequest(None, recipients, None, data)
    relay.deliver(msg)
コード例 #13
0
ファイル: server_tests.py プロジェクト: claytondaley/salmon
def test_relay_resolve_relay_host(DNS_mxlookup):
    DNS_mxlookup.return_value = []
    relay = server.Relay(None, port=8899)
    host = relay.resolve_relay_host('zedshaw@localhost')
    assert_equal(host, 'localhost')
    assert DNS_mxlookup.called

    DNS_mxlookup.reset_mock()
    DNS_mxlookup.return_value = [[100, "mail.zedshaw.com"]]
    host = relay.resolve_relay_host('*****@*****.**')
    assert_equal(host, 'mail.zedshaw.com')
    assert DNS_mxlookup.called
コード例 #14
0
ファイル: commands.py プロジェクト: claytondaley/salmon
def sendmail_command(port=8825, host='127.0.0.1', debug=0, TRAILING=None):
    """
    Used as a testing sendmail replacement for use in programs
    like mutt as an MTA.  It reads the email to send on the stdin
    and then delivers it based on the port and host settings.

    salmon sendmail -port 8825 -host 127.0.0.1 -debug 0 -- [recipients]
    """
    relay = server.Relay(host, port=port, debug=debug)
    data = sys.stdin.read()
    msg = mail.MailRequest(None, TRAILING, None, data)
    relay.deliver(msg)
コード例 #15
0
    def command(input, host, port, lmtp=None, debug=False):
        try:
            inbox = mailbox.mbox(input)
        except IOError:
            inbox = mailbox.Maildir(input, factory=None)

        relay = server.Relay(host, port=port, lmtp=lmtp, debug=debug)

        for key in inbox.keys():
            msgfile = inbox.get_file(key)
            msg = email.message_from_file(msgfile)
            relay.deliver(msg)
コード例 #16
0
ファイル: commands.py プロジェクト: claytondaley/salmon
def blast_command(input=None, host='127.0.0.1', port=8823, debug=0):
    """
    Given a maildir, this command will go through each email
    and blast it at your server.  It does nothing to the message, so
    it will be real messages hitting your server, not cleansed ones.
    """
    inbox = mailbox.Maildir(input)
    relay = server.Relay(host, port=port, debug=debug)

    for key in inbox.keys():
        msgfile = inbox.get_file(key)
        msg = email.message_from_file(msgfile)
        relay.deliver(msg)
コード例 #17
0
ファイル: server_tests.py プロジェクト: talwrii/salmon
def test_relay_deliver(client_mock):
    # test that relay will actually call smtplib.SMTP
    relay = server.Relay("localhost", port=0)

    relay.deliver(test_mail_response_plain_text())
    assert_equal(client_mock.return_value.sendmail.call_count, 1)

    relay.deliver(test_mail_response_html())
    assert_equal(client_mock.return_value.sendmail.call_count, 2)

    relay.deliver(test_mail_response_html_and_plain_text())
    assert_equal(client_mock.return_value.sendmail.call_count, 3)

    relay.deliver(test_mail_response_attachments())
    assert_equal(client_mock.return_value.sendmail.call_count, 4)
コード例 #18
0
ファイル: server_tests.py プロジェクト: talwrii/salmon
def test_relay_resolve_relay_host(query):
    from dns import resolver
    query.side_effect = resolver.NoAnswer
    relay = server.Relay(None, port=0)
    host = relay.resolve_relay_host('user@localhost')
    assert_equal(host, 'localhost')
    assert_equal(query.call_count, 1)

    query.reset_mock()
    query.side_effect = None  # reset_mock doens't clear return_value or side_effect
    query.return_value = [Mock()]
    query.return_value[0].exchange = "mx.example.com"
    host = relay.resolve_relay_host('*****@*****.**')
    assert_equal(host, 'mx.example.com')
    assert_equal(query.call_count, 1)
コード例 #19
0
def blast(input, host, port, lmtp=None, debug=False):
    """
    Given a Maildir, this command will go through each email
    and blast it at your server.  It does nothing to the message, so
    it will be real messages hitting your server, not cleansed ones.
    """
    try:
        inbox = mailbox.mbox(input)
    except IOError:
        inbox = mailbox.Maildir(input, factory=None)

    relay = server.Relay(host, port=port, lmtp=lmtp, debug=debug)

    for key in inbox.keys():
        msgfile = inbox.get_file(key)
        msg = email.message_from_file(msgfile)
        relay.deliver(msg)
コード例 #20
0
ファイル: server_tests.py プロジェクト: simhaonline/salmon
    def test_relay_deliver(self, client_mock):
        # test that relay will actually call smtplib.SMTP
        relay = server.Relay("localhost", port=0)

        msg = generate_mail(factory=mail.MailResponse, attachment=True)
        relay.deliver(msg)
        self.assertEqual(client_mock.return_value.sendmail.call_count, 1)

        msg = generate_mail(factory=mail.MailResponse, attachment=True)
        relay.deliver(msg)
        self.assertEqual(client_mock.return_value.sendmail.call_count, 2)

        msg = generate_mail(factory=mail.MailResponse, attachment=True)
        relay.deliver(msg)
        self.assertEqual(client_mock.return_value.sendmail.call_count, 3)

        msg = generate_mail(factory=mail.MailResponse, attachment=True)
        relay.deliver(msg)
        self.assertEqual(client_mock.return_value.sendmail.call_count, 4)
コード例 #21
0
ファイル: commands.py プロジェクト: claytondaley/salmon
def send_command(port=8825,
                 host='127.0.0.1',
                 username=False,
                 password=False,
                 ssl=False,
                 starttls=False,
                 debug=1,
                 sender=None,
                 to=None,
                 subject=None,
                 body=None,
                 attach=False):
    """
    Sends an email to someone as a test message.
    See the sendmail command for a sendmail replacement.
    
    salmon send -port 8825 -host 127.0.0.1 -debug 1 \\
            -sender EMAIL -to EMAIL -subject STR -body STR -attach False'

    There is also a username, password, and starttls option for those 
    who need it.
    """
    message = mail.MailResponse(From=sender, To=to, Subject=subject, Body=body)
    if attach:
        message.attach(attach)

    if username == False:
        username = None
    if password == False:
        password = None

    relay = server.Relay(host,
                         port=port,
                         username=username,
                         password=password,
                         ssl=ssl,
                         starttls=starttls,
                         debug=debug)
    relay.deliver(message)
コード例 #22
0
ファイル: server_tests.py プロジェクト: simhaonline/salmon
    def test_relay_reply(self, client_mock):
        relay = server.Relay("localhost", port=0)
        print("Relay: %r" % relay)

        relay.reply(generate_mail(), 'from@localhost', 'Test subject', 'Body')
        self.assertEqual(client_mock.return_value.sendmail.call_count, 1)
コード例 #23
0
ファイル: server_tests.py プロジェクト: claytondaley/salmon
def test_relay_reply():
    relay = server.Relay("localhost", port=8899)
    print "Relay: %r" % relay

    relay.reply(test_mail_request(), 'from@localhost', 'Test subject', 'Body')
コード例 #24
0
 def command(port, host, recipients, debug=False, lmtp=False):
     relay = server.Relay(host, port=port, debug=debug, lmtp=lmtp)
     data = sys.stdin.read()
     msg = mail.MailRequest(None, recipients, None, data)
     relay.deliver(msg)
コード例 #25
0
ファイル: server_tests.py プロジェクト: talwrii/salmon
def test_relay_raises_exception(create_mock):
    # previously, salmon would eat up socket errors and just log something. Not cool!
    create_mock.side_effect = socket.error
    relay = server.Relay("example.com", port=0)
    with assert_raises(socket.error):
        relay.deliver(test_mail_response_plain_text())
コード例 #26
0
ファイル: server_tests.py プロジェクト: talwrii/salmon
def test_relay_reply(client_mock):
    relay = server.Relay("localhost", port=0)
    print("Relay: %r" % relay)

    relay.reply(test_mail_request(), 'from@localhost', 'Test subject', 'Body')
    assert_equal(client_mock.return_value.sendmail.call_count, 1)
コード例 #27
0
ファイル: server_tests.py プロジェクト: simhaonline/salmon
 def test_relay_raises_exception(self, create_mock):
     # previously, salmon would eat up socket errors and just log something. Not cool!
     create_mock.side_effect = socket.error
     relay = server.Relay("example.com", port=0)
     with self.assertRaises(socket.error):
         relay.deliver(generate_mail(factory=mail.MailResponse))
コード例 #28
0
def relay(hostname="127.0.0.1", port=8824):
    """Wires up a default relay on port 8824 (the default salmon log port)."""
    return server.Relay(hostname, port, debug=0)
コード例 #29
0
ファイル: server_tests.py プロジェクト: mlalibs/salmon
def test_relay_smtp_ssl(client_mock):
    relay = server.Relay("localhost", port=8899, ssl=True)
    relay.deliver(test_mail_response_plain_text())
    assert_equal(client_mock.return_value.sendmail.call_count, 1)