diff --git a/mail_proxy_protocol.t b/mail_proxy_protocol.t
new file mode 100644
index 0000000..721fc29
--- /dev/null
+++ b/mail_proxy_protocol.t
@@ -0,0 +1,124 @@
+#!/usr/bin/perl
+
+# (C) Sergey Kandaurov
+# (C) Nginx, Inc.
+
+# Tests for mail proxy module, PROXY protocol with realip.
+
+###############################################################################
+
+use warnings;
+use strict;
+
+use Test::More;
+
+use MIME::Base64;
+
+BEGIN { use FindBin; chdir($FindBin::Bin); }
+
+use lib 'lib';
+use Test::Nginx;
+use Test::Nginx::SMTP;
+
+###############################################################################
+
+select STDERR; $| = 1;
+select STDOUT; $| = 1;
+
+local $SIG{PIPE} = 'IGNORE';
+
+my $t = Test::Nginx->new()->has(qw/mail smtp http rewrite/)
+	->write_file_expand('nginx.conf', <<'EOF');
+
+%%TEST_GLOBALS%%
+
+daemon off;
+
+events {
+}
+
+mail {
+    proxy_pass_error_message  on;
+    proxy_smtp_auth           on;
+    auth_http  http://127.0.0.1:8080/mail/auth;
+    smtp_auth  login plain;
+
+    server {
+        listen    127.0.0.1:8025 proxy_protocol;
+        protocol  smtp;
+
+        auth_http_header  X-Type proxy;
+    }
+
+    server {
+        listen    127.0.0.1:8027 proxy_protocol;
+        protocol  smtp;
+
+        set_real_ip_from  127.0.0.1/32;
+        auth_http_header  X-Type realip;
+    }
+}
+
+http {
+    %%TEST_GLOBALS_HTTP%%
+
+    server {
+        listen       127.0.0.1:8080;
+        server_name  localhost;
+
+        location = /mail/auth {
+            set $reply ERROR;
+            set $test $http_x_type:$http_client_ip:$http_proxy_protocol_addr;
+
+            if ($test = proxy:127.0.0.1:192.0.2.1) {
+                set $reply OK;
+            }
+
+            if ($test = realip:192.0.2.1:192.0.2.1) {
+                set $reply OK;
+            }
+
+            add_header Auth-Status $reply;
+            add_header Auth-Server 127.0.0.1;
+            add_header Auth-Port %%PORT_8026%%;
+            add_header Auth-Wait 1;
+            return 204;
+        }
+    }
+}
+
+EOF
+
+$t->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon);
+$t->try_run('no proxy_protocol')->plan(6);
+
+$t->waitforsocket('127.0.0.1:' . port(8026));
+
+###############################################################################
+
+# connection with PROXY protocol
+
+my $s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8025));
+$s->send('PROXY TCP4 192.0.2.1 192.0.2.2 123 5678');
+$s->check(qr/^220 /, "greeting with proxy_protocol");
+
+$s->send('EHLO example.com');
+$s->check(qr/^250 /, "ehlo with proxy_protocol");
+
+$s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", ''));
+$s->authok('auth with proxy_protocol');
+
+# connection with PROXY protocol and set_realip_from
+
+$s = Test::Nginx::SMTP->new(PeerAddr => '127.0.0.1:' . port(8027));
+
+$s->send('PROXY TCP4 192.0.2.1 192.0.2.2 123 5678');
+$s->check(qr/^220 /, "greeting with proxy_protocol and realip");
+
+$s->send('EHLO example.com');
+$s->check(qr/^250 /, "ehlo with proxy_protocol and realip");
+
+$s->send('AUTH PLAIN ' . encode_base64("\0test\@example.com\0secret", ''));
+$s->authok('auth with proxy_protocol and realip');
+
+###############################################################################
