Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Отправка письма из консоли через нужный почтовый ящик  (Прочитано 9163 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн El Scorpio

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Однажды на работе возникла необходимость использования одной системы, для которой было нужно постоянно получать и устанавливать обновления, а результаты обновлений - передавать представителю разработчика.
Мой мозг сразу же предложил написать скрипт, который бы отбирал из пакета обновлений нужные, распаковывал их и закидывал по сети на сервер, запускал "удалённый рабочий стол" (увы, иначе никак), загружал отчёты и отправлял их по электронной почте.
Вскоре скрипт был написан, отлажен и запущен в работу. Затык возник на последнем пункте, поскольку организация своего сервера не имеет, и сотрудники используют почтовые ящики на яндексе и других сайтах.

Увы, прочтение имевшихся под рукой книг и гугление ничего хорошего не дали. Везде было написано, что отправка письма из консоли производится командой mail, но ни одно руководство не содержало никакой информации о том, куда для этого надо прописать логин, пароль и адрес почтового сайта. Размещение вопроса на некоторых тематических конференциях привело опять же к появлению множества ответов "погугли" и "man mail"
Тем не менее, повторный сеанс глубинного гугления таки навёл на решение

1. Устанавливаем на свой компьютер локальный smtp-сервер
sudo apt-get install postfix

2. Настраиваем его путём редактирования файла /etc/postfix/main.cf
Цитировать
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
delay_warning_time = 1h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

# computername - это имя моего служебного компьютера, замените на имя своего
myhostname = computername
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = computername, localhost.localdomain, localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

# сервер, через который по умолчанию будет пересылаться вся почта
relayhost = smtp.pochta.ru:25
# файл, в котором прописано правило подмены адреса отправителя в письме
sender_canonical_maps = hash:/etc/postfix/sender_canonical
# использовать защищённые каналы связи
smtp_use_tls = yes
# файл с доверенными сертификатами почтовых серверов
smtp_tls_CAfile = /etc/postfix/sasl/smtp-servers.pem
smtp_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtp_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
# файл с логинами и паролями почтовых ящиков
smtp_sasl_password_maps = hash:/etc/postfix/sender_password

3. Прописываем нужные значения в файлы с параметрами
файл /etc/postfix/sender_canonical
username@computername  mymailbox@pochta.ru

файл /etc/postfix/sender_password
smtp.pochta.ru:25 mymailbox@pochta.ru:mypassword
* заполняется согласно требованиям указанного сервера по настройки почтовых программ.

4. Устанавливаем для этих файлов права доступа только для root (ведь в них пароли храниться будут)
cd /etc/postfix
sudo chown root:root sender*
sudo chmod 600 sender*

Преобразовываем эти файлы в базы данных нужного формата
sudo postmap sender_canonical
sudo postmap sender_password


5. Заполняем файл сертификатов почтовых серверов /etc/postfix/sasl/smtp-servers.pem
openssl s_client -starttls smtp -crlf -connect smtp.pochta.ru25
Эта команда выведет в консоль много текста. Содержимое между -----BEGIN CERTIFICATE----- и -----END CERTIFICATE----- (включительно) нужно будет скопировать в к себе файл сертификатов


Ну в общем-то всё. Теперь команда mail , о которой столько раз мне говорили мастера погуглить и эртээфэмить отправляет почту с нужного мне почтового ящика.
Указанный конфиг исправно работает уже несколько месяцев.

Тем не менее, я всегда готов выслушать дополнения и замечания более компетентных товарищей

Оффлайн Revil

  • Активист
  • *
  • Сообщений: 284
  • Вечный чайник
    • Просмотр профиля
что то у меня не выходит настроить отправку писем ..пробовал c использованием smtp от  yandex и mail .. ругается на sasl
полученный сертификат нужно копировать куда нить еще кроме как в /etc/postfix/sasl/smtp-servers.pem?

Если не трудно дайте вывод  владелец:группа и права доступа от лог файлов mail.err и mail.log
« Последнее редактирование: 23 Декабря 2011, 06:19:29 от Revil »
Phenom II x4 955 , Gigabyte 970A-D3, 8Gb Ram, Asus gtx 470 => мне хватает :)

Оффлайн kostryukov

  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
Для полной картины, опишите еще отправку письма с вложением =)

п.с. ИМХО проще через exim
у меня можно спросить=)

Оффлайн El Scorpio

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Мда. Боюсь, что уже не смогу помочь практическими советами, потому что несколько месяцев тому назад как прекратил использовать данный скрипт (ввиду перехода на более удобную систему обновления) и удалил postfix со своего компьютера.

Попробую дать ответы, исходя из конфигурации почтового сервера ЛВС, который работает в режиме "смартхоста" для "нужного почтового ящика"

Про сертификаты удалённого почтового сервера. Увы, в вышеупомянутом конфиге я написал всякую чушь
smtp_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem - этот параметр удалить
smtp_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key - этот параметр удалить

Что касается параметра smtp_tls_CAfile , то в соответствующий файл нужно помещать сертификаты КОРНЕВЫХ центров сертификации используемых почтовых сайтов.
Или можно указать каталог с сертификатами корневых центров сертификации
smtp_tls_CApath = /etc/ssl/certs
У меня на сервере в этом каталоге находится куча символьных ссылок на файлы из каталога /usr/share/ca-certificates/mozilla/

А можно просто сделать необязательной проверку сертификатов. В файле main.cf найти строку
   smtp_tls_security_level=verify
и заменить её на
   smtp_tls_security_level=may
Однако это может создать возможность компрометации передаваемой информации в случае подключения к поддельному серверу. К сожалению, донастроить нормальную работу сертификатов пока не удалось :)

aux314

  • Гость
Пользуйтесь sendemail ничего настраивать не надо, все отправляется одной командой

 

Страница сгенерирована за 0.031 секунд. Запросов: 25.