Инструкция по установке EAI почтового сервера под ОС CentOS 7

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску
    • Инструкция по установке EAI почтового сервера под ОС CentOS 7**
Почтовый сервер с поддержкой EAI

С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО.

Необходимое ПО
 - Centos 7.4
 - Postfix 3.2.3
 - Dovecot 2.2.10
 - MariaDB 10.3.11
 - Squirrelmail 5.5.56
    • Примечания:**
 * в данной инструкции не разъясняется, как установить Centos 7.4
 * версия Postfix 3.x.x и выше поддерживает EAI
 * в реальных условиях необходимо также настроить сервер DNS
 * putty и winscp используются для подключения к серверу
Установка EAI почтового сервера
Задайте имя хоста
 - Обновите пакеты почтового сервера до последней версии

> **# yum -y update**

 - Задайте имя хоста (например, mail.test.ru) с помощью команды

> **# hostnamectl set-hostname [[1]]**

 - Добавьте имя хоста в файл hosts

> **# vi /etc/hosts**

//Пример файла hosts//

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 [[2]]

1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [[3]]

//*В зависимости от среды установки CentOS вам может понадобиться установить дополнительные сервисы (например, может быть недоступна команда «vi»)//

 - Установите wget для скачивания дополнительного ПО

> **# yum -y install wget**

 - Установите //telnet// для тестирования работы почтового сервера

> **# yum -y install telnet**

Настройте файрвол
 - Проверьте, что у почтового сервиса имеется статус «firewalld service»

> Статус должен быть активным (работающим)

      1. systemctl status firewalld**

//Пример//

    • Active: active (running) since Mon 2019-11-18 14:12:03 +07; 1h 13min ago**
 - Проверьте открытые зону файрвола и сетевой интерфейс

> **# firewall-cmd --get-active-zones**

//Пример//

    • public**
    • interfaces: ens32**
 - Проверьте сервисы файрвола в публичной зоне

> **# firewall-cmd --zone=public --list-services**

//Пример//

    • cockpit dhcpv6-client ssh**
 - Откройте необходимые сервисы на файрволе в публичной зоне почтового сервера

> **# firewall-cmd --permanent --zone=public --add-service=http** > > **# firewall-cmd --permanent --zone=public --add-service=https** > > **# firewall-cmd --permanent --zone=public --add-service=mysql** > > **# firewall-cmd --permanent --zone=public --add-service=smtp** > > **# firewall-cmd --permanent --zone=public --add-service=smtps** > > **# firewall-cmd --permanent --zone=public --add-service=imap** > > **# firewall-cmd --permanent --zone=public --add-service=imaps** > > **# firewall-cmd --reload**

 - Еще раз проверьте список сервисов на файрволе в публичной зоне, вы увидите только открытые сервисы //*Дополнительно: задайте конфигурацию сервисов файрвола для почтового сервера ([[4]]//

> **# firewall-cmd --zone=public --list-services**

//Пример//

    • cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh**
 - В этом примере мы открыли SELinux для удобства настройки

> **# vi /etc/selinux/config**

//Пример//

    • This file controls the state of SELinux on the system.**
      1. SELINUX= can take one of these three values:**
      1. enforcing - SELinux security policy is enforced.**
      1. permissive - SELinux prints warnings instead of enforcing.**
      1. disabled - No SELinux policy is loaded.**
    • SELINUX=disabled**
      1. SELINUXTYPE= can take one of these two values:**
      1. targeted - Targeted processes are protected,**
      1. mls - Multi Level Security protection.**
    • SELINUXTYPE=targeted**
 - Перезапустите сервер
      1. reboot**
      1. sestatus**

//Пример//

    • disabled**
Создайте SSL-сертификат

Пошаговая инструкция для создания SSL-ключа, чтоб использовать с postfix и dovecot

 - Создайте индивидуальный ключ

> **# cd /etc/pki/tls/certs** > > **# make** [[5]]

//Пример//

    • umask 77 ; \**
    • /usr/bin/openssl genrsa -aes128 2048 > eai.key**
    • Generating RSA private key, 2048 bit long modulus**
    • ...**
    • ...**
    • e is 65537 (0x10001)**
    • Verifying - Enter pass phrase:** [[6]]
 - Удалите //Passphase// из созданного ключа

> **# openssl rsa -in** [[7]] **-out** [[8]]

//Пример//

    • writing RSA key**
 - Создайте csr
 - **# make eai.csr**

//Пример//

    • umask 77 ; \**
    • /usr/bin/openssl req -utf8 -new -key eai.key -out eai.csr**
    • You are about to be asked to enter information that will be incorporated**
    • into your certificate request.**
    • What you are about to enter is what is called a Distinguished Name or a DN.**
    • There are quite a few fields but you can leave some blank**
    • For some fields there will be a default value,**
    • If you enter '.', the field will be left blank.**
    • -----**
    • Country Name (2 letter code) [XX]:**RU [[9]]
    • State or Province Name (full name) []:**[[10]] [[11]]
    • Locality Name (eg, city) [Default City]:**[[12]] [[13]]
    • Organization Name (eg, company) [Default Company Ltd]:**[[14]] [[15]]
    • Organizational Unit Name (eg, section) []:**[[16]] [[17]]
    • Common Name (eg, your name or your server's hostname) []:**[[18]] [FQDN//]
    • Please enter the following 'extra' attributes**
    • to be sent with your certificate request**
    • A challenge password []:** [[20]]
    • An optional company name []:** [[21]]

4. Сгенерируйте ключ

      1. openssl x509 -in** [[22]] **-out** [[23]] **-req -signkey** [[24]] **-days 3650**

//Пример//

    • Signature ok**
    • subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@test.ru**
    • Getting Private key**
Установка mariadb, Postfix и Dovecot
 - Установите mariadb , Postfix , Dovecot и необходимые пакеты

> **# yum --enablerepo=centosplus install postfix** > > **# yum install dovecot mariadb-server dovecot-mysql**

 - Обновите postfix с версии 2.x.x до версии 3.x.x

На CentOS 7 версия postfix 2.x.x стоит по умолчанию. Необходимо ее удалить и обновить до версии 3.х.х. или выше.

      1. yum -y remove postfix**
      1. yum -y remove ssmtp**
      1. yum -y remove sendmail**

Создайте файл репозитория gf.repo для установки postfix версии 3.х.х или выше

      1. vi /etc/yum.repos.d/gf.repo**

//Пример//

    • [gf]**
    • name=Ghettoforge packages that won't overwrite core distro packages.**
    • enabled=1**
    • gpgcheck=1**
    • gpgkey=file:%%//%%/etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7**
    • failovermethod=priority**
    • [gf-plus]**
    • name=Ghettoforge packages that will overwrite core distro packages.**
      1. Please read [[27]] *before* enabling this repository!**
    • enabled=1**
    • gpgcheck=1**
    • gpgkey=file:%%//%%/etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el7**
    • failovermethod=priority**

Загрузите ключ для использования с репозиторием, вставьте в строку: /etc/pki/rpm-gpg/

      1. cd /etc/pki/rpm-gpg/**

Установите postfix версию 3.х.х

      1. yum -y install postfix3 postfix-mysql**

Проверьте postfix версию 3.х.х

      1. postconf -d | grep mail_version**
    • mail_version = 3.5.7**
 - Настройте mariadb, postfix, dovecot для автоматического запуска

> **# systemctl start mariadb** > > **# systemctl enable mariadb** > > **# systemctl start postfix** > > **# systemctl enable postfix** > > **# systemctl start dovecot** > > **# systemctl enable dovecot**

 - Проверьте статус mariadb, postfix, dovecot

> **# systemctl status mariadb** > > **# systemctl status postfix** > > **# systemctl status dovecot**

Настройка MariaDB
 - Установите UTF8 в mysql для работы с Unicode, добавив следующую команду к

> /etc/my.cnf.d/maridb-server.cnf для [mysqld]

      1. vi /etc/my.cnf**

//Пример//

    • [mysqld]**
    • character-set-server = utf8**
    • collation-server = utf8_general_ci**
    • skip-character-set-client-handshake**
    • bind-address=127.0.0.1**
    • datadir=/var/lib/mysql**
    • socket=/var/lib/mysql/mysql.sock**
      1. Disabling symbolic-links is recommended to prevent assorted security risks**
    • symbolic-links=0**
      1. Settings user and group are ignored when systemd is used.**
      1. If you need to run mysqld under a different user or group,**
      1. customize your systemd unit file for mariadb according to the**
      1. instructions in [[29]]**
    • [mysqld_safe]**
    • log-error=/var/log/mariadb/mariadb.log**
    • pid-file=/var/run/mariadb/mariadb.pid**
      1. include all files from the config directory**
    • !includedir /etc/my.cnf.d**
 - Перезапустите MariaDB

> **# systemctl restart mariadb**

 - Настройте безопасный доступ к mysql, установив пароль для пользователя с правами root (* задайте только новый пароль, остальное пропустите, нажав клавишу //enter//)

> **# mysql_secure_installation**

 - Зайдите в аккаунт mysql с новым паролем

> **# mysql -u root -p**

 - Создайте новую базу данных (eaimail) для хранения записей об использовании почтового сервера

> **# CREATE DATABASE [[30]];** > > **# USE [[31]];**

 - Создайте пользователя с правами доступа к базе eaimail

> **# GRANT SELECT, INSERT, UPDATE, DELETE ON** [[32]]**.* TO '**//yourdbuser//'**@'localhost' IDENTIFIED BY '**//yourdbpassword//'**;** > > **# GRANT SELECT, INSERT, UPDATE, DELETE ON** [[33]]**.* TO '**//yourdbuser//'**@'localhost.localdomain' IDENTIFIED BY '**//yourdbpassword//'**;** > > **# FLUSH PRIVILEGES;**

 - Проверьте созданного пользователя

> **# SHOW GRANTS FOR '**//yourdbuser//'**@'localhost';**

 - Создайте таблицы для //domains//, //forwardings// (для пересылки почты с интернационализированных адресов на адреса в кодировке ASCII) и //users// для создания почтовых ящиков

> **# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );**

      1. CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );**
      1. CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );**
      1. quit**
 - Перезапустите MariaDB

> **# systemctl restart mariadb**

 - Настройте //domain// и //users// в базе данных интернационализированных адресов

> Зайдите в mariadb и выберите базу данных //eaimail//, введите домен ASCII и IDN домен, введите ASCII почту и почту EAI с паролем

      1. mysql -u root -p**
      1. INSERT INTO domains (domain) VALUES ('**test.ru'**);**
      1. INSERT INTO domains (domain) VALUES ('**тест.рф'**);**
      1. INSERT INTO users (email, password) VALUES ('**[[35]]'**, ENCRYPT('**//userpassword//'**));**
      1. INSERT INTO users (email, password) VALUES ('**[[36]]'**, ENCRYPT('**//userpassword//'**));**

Настройте правило пересылки для всех писем с интернационализированного адреса на адрес ASCII

      1. INSERT INTO forwardings (source,destination) VALUES ('**[[37]]'**,'**test@test.ru'**);**
      1. quit**
    • Настройка Postfix**
Создайте связь между Postfix и MariaDB
 - Создайте файл-скрипт, чтобы получить значение //domain// из базы данных

> **# vi /etc/postfix/mysql-virtual_domains.cf**

//Пример//

    • query = SELECT domain AS virtual FROM domains WHERE domain='%s'**
    • hosts = 127.0.0.1**
 - Создайте файл mysql-virtual_forwardings.cf для получения пересланной почты из базы данных

> **# vi /etc/postfix/mysql-virtual_forwardings.cf**

//Пример//

    • query = SELECT destination FROM forwardings WHERE source='%s'**
    • hosts = 127.0.0.1**
 - Создайте файл-скрипт для создания почтового ящика и использования его для логина

> **# vi /etc/postfix/mysql-virtual_mailboxes.cf**

//Пример//

    • query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'**
    • hosts = 127.0.0.1**
 - Создайте файл-скрипт для пересылки всей почты на другой сервер SMTP

> **# vi /etc/postfix/mysql-virtual_email2email.cf**

//Пример//

    • user = yourdbuser**
    • password = yourdbpassword**
    • dbname = eaimail**
    • query = SELECT email FROM users WHERE email='%s'**
    • hosts = 127.0.0.1**
 - Установите необходимые права созданным скриптам

> **# chmod o= /etc/postfix/mysql-virtual_*.cf** > > **# chgrp postfix /etc/postfix/mysql-virtual_*.cf**

 - Создайте пользователя и группу для почтового ящика

> **# groupadd -g 5000 vmail** > > **# useradd -g vmail -u 5000 vmail -d /home/vmail -m**

 - Измените /etc/postfix/main.cf

> **# vi /etc/postfix/main.cf**

//Пример//

    • inet_interfaces = all**
    • inet_protocols = ipv4**
    • mydestination = localhost, localhost.localdomain**
    • alias_database = hash:/etc/aliases**
    • sendmail_path = /usr/sbin/sendmail.postfix**
    • newaliases_path = /usr/bin/newaliases.postfix**
    • mailq_path = /usr/bin/mailq.postfix**
    • meta_directory = /etc/postfix**
    • shlib_directory = no**
    • myhostname =** [[47]]
    • myorigin = $mydomain**
    • readme_directory = no**
    • mynetworks = 127.0.0.1**
    • message_size_limit = 30720000**
    • smtpd_sasl_auth_enable = yes**
    • smtpd_sasl_type = dovecot**
    • smtpd_sasl_path = private/auth**
    • smtpd_sasl_authenticated_header = yes**
    • broken_sasl_auth_clients = yes**
    • smtpd_use_tls = yes**
    • smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination**
    • smtpd_tls_cert_file = /etc/pki/tls/certs/**[[49]]
    • smtpd_tls_key_file = /etc/pki/tls/certs/**//eai.key//
    • smtpd_tls_security_level = may**
    • smtpd_tls_auth_only = yes**
    • smtpd_tls_loglevel = 1**
    • alias_maps = hash:/etc/aliases**
    • virtual_mailbox_base = /home/vmail**
    • virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf**
    • virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf**
    • virtual_uid_maps = static:5000**
    • virtual_gid_maps = static:5000**
    • virtual_alias_domains =** [[50]]
    • virtual_transport = dovecot**
    • virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf**
    • smtputf8_enable = yes**
    • proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks**
 - Измените /etc/postfix/master.cf , добавив команду в конце файла

> **# vi /etc/postfix/master.cf**

//Пример//

    • dovecot unix - n n - - pipe**
    • flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}**
 - Измените /etc/postfix/master.cf , чтобы разрешить выполнение команд ниже (у остальных в начале должен стоять #)

//Пример//

    • smtps inet n - - - - smtpd**

-o syslog_name=postfix/smtps

-o smtpd_tls_wrappermode=yes

-o smtpd_sasl_auth_enable=yes

-o smtpd_client_restrictions=permit_sasl_authenticated,reject

-o smtpd_relay_restrictions=permit_sasl_authenticated,reject

-o milter_macro_daemon_name=ORIGINATING

 - Перезапустите postfix

//Пример//

      1. systemctl restart postfix**
 - Назначьте алиасы почтовым адресам, изменив файл aliases 

> Добавьте 2 строки

      1. vi /etc/aliases**
    • postmaster: root**
    • root: postmaster@test.ru**
 - Обновите алиасы и перезапустите postfix

> **# newaliases** > > **# systemctl restart postfix**

Настройка Dovecot
 - Сделайте резервную копию существующей конфигурации

> **# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup**

 - Настройте конфигурацию dovecot

> **# vi /etc/dovecot/dovecot.conf**

//Пример//

    • protocols = imap pop3 lmtp**
    • log_timestamp = "%Y-%m-%d %H:%M:%S "**
    • mail_location = maildir:/home/vmail/%d/%n/Maildir**
    • ssl_cert = </etc/pki/tls/certs/**[[51]]
    • ssl_key = </etc/pki/tls/certs/**//eai.key//
    • ssl_dh_parameters_length = 2048**
    • ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL**
    • namespace {**
    • type = private**
    • separator = .**
    • prefix = INBOX.**
    • inbox = yes**
    • }**
    • service auth {**
    • unix_listener auth-master {**
    • mode = 0600**
    • }**
    • unix_listener /var/spool/postfix/private/auth {**
    • mode = 0666**
    • }**
    • user = root**
    • }**
    • auth_mechanisms = plain login**
    • service auth-worker {**
    • user = root**
    • }**
    • protocol lda {**
    • log_path = /home/vmail/dovecot-deliver.log**
    • auth_socket_path = /var/run/dovecot/auth-master**
    • postmaster_address = postmaster@test.ru**
    • }**
    • protocol pop3 {**
    • pop3_uidl_format = %08Xu%08Xv**
    • pop3_client_workarounds = outlook-no-nuls oe-ns-eoh**
    • }**
    • passdb {**
    • driver = sql**
    • args = /etc/dovecot/dovecot-sql.conf.ext**
    • }**
    • userdb {**
    • driver = static**
    • args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes**
    • }**
 - Создайте скрипт, чтобы dovecot мог работать с SQL

> **# vi /etc/dovecot/dovecot-sql.conf.ext**

//Пример//

    • driver = mysql**
    • connect = host=127.0.0.1 dbname=**//eaimail// **user=**//yourdbuser// **password=**//yourdbpassword//
    • default_pass_scheme = CRYPT**
    • password_query = SELECT email as user, password FROM users WHERE email='%u';**
 - Установите необходимые права группе dovecot

> **# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext** > > **# chmod o= /etc/dovecot/dovecot-sql.conf.ext**

 - Перезапустите dovecot

> **# systemctl restart dovecot**

 - Проверьте журнал почтового сервера /var/log/maillog

> **# tail /var/log/maillog**

//Пример//

    • Mar 18 17:10:26 localhost postfix/postfix-script[3274]: starting the Postfix mail system**
    • Mar 18 17:10:26 localhost postfix/master[3276]: daemon started -- version 2.10.1, configuration /etc/postfix**
    • Mar 18 17:12:28 localhost dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)**
Протестируйте почтовый сервер EAI
 - Протестируйте pop3

> **# telnet localhost pop3**

//Пример//

    • Trying 127.0.0.1...**
    • Connected to localhost.localdomain.**
    • Escape character is '^]'.**
    • +OK Dovecot ready.**
 - Протестируйте SMTP

> **# telnet localhost 25** > > **# ehlo localhost**

//Пример//

    • 250-mail.test.ru**
    • 250-PIPELINING**
    • 250-SIZE 30720000**
    • 250-VRFY**
    • 250-ETRN**
    • 250-STARTTLS**
    • 250-AUTH PLAIN**
    • 250-AUTH=PLAIN**
    • 250-ENHANCEDSTATUSCODES**
    • 250-8BITMIME**
    • 250-DSN**
    • 250 SMTPUTF8**
 - Протестируйте отправку и получение почты при помощи mailx

Проверьте журнал /var/log/maillog Примерный результат:

      1. yum -y install mailx**
      1. mailx thai@test.ru (input subject then press //enter// follow by content and use Ctrl+D for sending out)**
      1. tail /var/log/maillog**

//Пример//

    • Nov 13 15:19:07 mail postfix/pickup[31954]: E9AB020199E5: uid=0 from=<root>**
    • Nov 13 15:19:07 mail postfix/cleanup[1938]: E9AB020199E5: message-id=<20171113081907.E9AB020199E5@mail.test.ru>**
    • Nov 13 15:19:07 mail postfix/qmgr[21141]: E9AB020199E5: from=<root@test.ru>, size=434, nrcpt=1 (queue active)**
    • Nov 13 15:19:08 mail postfix/pipe[1946]: E9AB020199E5: to=<tanagan@test.ru>, relay=dovecot, delay=0.09, delays=0.04/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service)**
    • Nov 13 15:19:08 mail postfix/qmgr[21141]: E9AB020199E5: removed**

Если вы нашли ошибку в журнале: «unsupported dictionary type: MySQL», причина заключается в использовании postfix 3.2.4. В этой версии еще есть баги. Проверьте /etc/postfix/dynamicmaps.cf.d/

      1. cd /etc/postfix/dynamicmaps.cf.d/**
      1. vi mysql.cf**
    • mysql /usr/lib/postfix/postfix-mysql.so dict_mysql_open**
 - Проверьте журнал, чтобы увидеть результат отправки в Dovecot /home/vmail/dovecot-deliver.log, Примерный результат:
      1. tail /home/vmail/dovecot-deliver.log**
    • 2017-11-13 15:19:08 lda(tanagan@test.ru): Info: msgid=<20171113081907.E9AB020199E5@mail.test.ru>: saved mail to INBOX**
 - Проверьте почтовый ящик. При отправке и получении писем вы увидите следующий результат:
      1. cd /home/vmail/test.ru/thai/Maildir**
      1. find**

//Пример//

    • .**
    • ./dovecot-uidlist**
    • ./cur**
    • ./new**
    • ./new/1285609582.P6115Q0M368794.li172-137**
    • ./dovecot.index**
    • ./dovecot.index.log**
    • ./tmp**
 - Проверьте почтовый ящик с помощью почтового клиента mutt, чтобы увидеть письма в почтовом ящике

> **# yum -y install mutt** > > **# mutt -f .**

 - Проверьте отправку писем с интернационализированного адресов
 * В конце отправляемого сообщения поставьте «.»
 * Нажмите Ctrl+] , чтобы выйти
      1. telnet localhost 25**
      1. EHLO localhost**
      1. MAIL FROM: тест@тест.рф SMTPUTF8**
      1. RCPT TO: тест1@тест1.рф**
      1. data**
      1. Subject: eai test**
      1. .**
Установите SquirrelMail
 - Установите squirrelmail

> **# yum -y install epel-release** > > **# yum install squirrelmail**

 - Если у вас не установлен Apache, установите Apache

> **# yum -y install httpd** > > **# systemctl enable httpd** > > **# systemctl start httpd** > > **# systemctl status httpd**

 - Скопируйте/перенесите squirrelmail в /var/www/html/

> **# cd /var/www/html/**

(скопируйте squirrelmail в /var/www/html/ например используя для копирования winscp)

 - Создайте каталог данных для squirrelmail

> **# cd /var/lib/squirrelmail/** > > **# mkdir data** > > **# chmod ugo+rwx data/**

 - Протестируйте логин для доступа через веб-браузеры. Введите IP сервера, затем /squirrelmail

> **# Test sending and receiving mail**