Многие хоть раз да пользовались службами одноразовых почтовых ящиков. Идея сама по себе прекрасна — не приходится оставлять невнятным сайтам основные ящики только ради единократного доступа к какому-либо ресурсу, не нужно тратить несколько минут на регистрацию и разгадывание капч на одном из email сервисов.
Но у таких служб все же есть кое-какие недостатки:
К счастью, настроить свой exim для получения подобных временных ящиков не составляет особого труда. При этом не хотелось бы постоянно куда-то лезть, нажимать какие-то кнопки, копировать полученный адрес. Хочется просто вставить заранее известный адрес, в котором уже указана дата его окончания. Например: user.20181231@domain.tld — будет работать вплоть до 31 декабря 2018 года включительно. Пусть время существования такого ящика будет измеряться не минутами, а днями, не беда — это достаточная цена за простоту. Впрочем, можно модифицировать метод для обработки адресов хоть с миллисекундами, если вам не лень при указании адреса набрать кроме даты еще и время.
Exim из коробки позволяет настроить суффиксы для адресов. То есть когда user@domain.tld и user.suffix@domain.tld считаются одним и тем же адресом. Делается это в настройках основного роутера:
Этими суффиксами и можно воспользоваться для создания адресов нужного типа. Осталось только научить наш MTA отвергать почту, которая приходит на просроченные адреса. Exim имеет внутренний perl интерпретатор и позволяет подсунуть perl файл с пользовательскими подпрограммами, результат работы которых можно использовать в конфигурации. Достаточно указать в основной конфигурации путь к файлу:
Но прежде чем писать собственно подпрограмму-парсер, настроим сам exim на отвергание писем для некоторых адресатов. Для этого есть ACL под названием 'acl_check_rcpt'. Добавляем новое условие перед финальным accept:
Для всех получателей, для которых perl-подпрограмма blockRcptByDate вернет истинное значение, почту отвергаем и делаем вид, что такого ящика не существует.
Осталось реализовать подгрограмму и дело сделано:
Но у таких служб все же есть кое-какие недостатки:
- ящик действительно одноразовый — спустя 5 (10, 20) минут после последнего использования доступ к нему исчезнет навсегда. Нужно быть уверенным что сам ящик и почта на нем не понадобятся уже никогда
- некоторые сайты не принимают регистрацию с адресом в доменах таких служб
- про безопасность данных говорить и вовсе не стоит. Маловероятно, конечно, что на такой ящик придет письмо с чувствительной информацией. Но тем не менее, хотелось бы иметь полный контроль над происходящим
К счастью, настроить свой exim для получения подобных временных ящиков не составляет особого труда. При этом не хотелось бы постоянно куда-то лезть, нажимать какие-то кнопки, копировать полученный адрес. Хочется просто вставить заранее известный адрес, в котором уже указана дата его окончания. Например: user.20181231@domain.tld — будет работать вплоть до 31 декабря 2018 года включительно. Пусть время существования такого ящика будет измеряться не минутами, а днями, не беда — это достаточная цена за простоту. Впрочем, можно модифицировать метод для обработки адресов хоть с миллисекундами, если вам не лень при указании адреса набрать кроме даты еще и время.
Exim из коробки позволяет настроить суффиксы для адресов. То есть когда user@domain.tld и user.suffix@domain.tld считаются одним и тем же адресом. Делается это в настройках основного роутера:
primary_router:
local_part_suffix = .*
local_part_suffix_optional
Этими суффиксами и можно воспользоваться для создания адресов нужного типа. Осталось только научить наш MTA отвергать почту, которая приходит на просроченные адреса. Exim имеет внутренний perl интерпретатор и позволяет подсунуть perl файл с пользовательскими подпрограммами, результат работы которых можно использовать в конфигурации. Достаточно указать в основной конфигурации путь к файлу:
perl_startup = do '/etc/exim4/exim4.pl'
Но прежде чем писать собственно подпрограмму-парсер, настроим сам exim на отвергание писем для некоторых адресатов. Для этого есть ACL под названием 'acl_check_rcpt'. Добавляем новое условие перед финальным accept:
deny
condition = ${perl{blockRcptByDate}{$local_part}}
message = Unrouteable address
Для всех получателей, для которых perl-подпрограмма blockRcptByDate вернет истинное значение, почту отвергаем и делаем вид, что такого ящика не существует.
Осталось реализовать подгрограмму и дело сделано:
exim4.pl
sub blockRcptByDate{
my $lp = shift;
# if local part contains dot and 8 digits untill the end
if( $lp =~ /\.\d{8}$/ ){
my @now = localtime(time());
my $now = sprintf("%s%02d%02d", ($now[5] + 1900) , ($now[4] + 1) , $now[3]);
# return 1 - means block if provided date is in the past
return (
substr( $lp, -8, 8 ) < $now
? 1
: 0
);
}
return 0;
}