Главное преимущество Mutt, как почтового клиента (по моему мнению), это то - что он консольный. Если кто-то не считает это преимуществом, то дальше можете не читать :). Но, если не менять настройки, mutt просто передает исходящую почту локальному MTA (mail transfer agent), который уже отправляет почту по своему усмотрению. По умолчанию это усмотрение сводится к тому, чтобы отправить почту с localhost (локального доменного имени любого компьютера). Письма, отправленные с такого адреса, обычно классифицируются как спам и до получателя не доходят. Но выход есть.
Выходов даже несколько, но я рассмотрю только один - настройку MTA для работы через внешний SMTP сервер (в данном случае gmail) вместо отправки почты с localhost. Поскольку MTA существуют самые разные и многим нравится только какой-то определенный, я попытаюсь описать настройку нескольких популярных MTA.
1. Sendmail
Классический Sendmail многим не нравится из-за сложной настройки, но все-таки это очень мощный и достаточно распространенный MTA. Итак (все действия будут выполнятся пользователем root),
# apt-get install sendmail
Добавим несколько строк в /etc/mail/sendmail.mc для того, чтобы Sendmail отсылал почту через gmail (добавлять эти строчки нужно до параметров MAILER, иначе потом будет ошибка при сборке конфигов).
define(`SMART_HOST',`smtp.gmail.com')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`RELAY_MAILER',`esmtp')dnl
define(`RELAY_MAILER_ARGS', `TPC $h 587')dnl
FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl
Теперь создадим папку /etc/mail/auth, а в ней - файл client-info, в котором будут храниться наши логин и пароль для my.name@gmail.com.
# mkdir /etc/mail/auth
# touch /etc/mail/auth/client-info
Добавим в client-info наши параметры авторизации (my.name заменим на свой логин на gmail, а password - на пароль).
AuthInfo:smtp.gmail.com "U:root" "I:my.name" "P:password" "M:PLAIN"
AuthInfo:smtp.gmail.com:587 "U:root" "I:my.name" "P:password" "M:PLAIN"
Для пущей безопасности можно сделать этот файл (да и папку тоже) доступными только для пользователя root
# chmod 600 /etc/mail/auth/client-info
# chmod 700 /etc/mail/auth
Преобразуем этот файл в нужный формат
# makemap -r hash /etc/mail/auth/client-info.db < /etc/mail/auth/client-info
Теперь выполним одно специфичное для Sendmail действие - пересборку конфигурационных файлов
# cd /etc/mail
# make
И наконец перезапускаем MTA для применения изменений
# /etc/init.d/sendmail reload
Готово. Можно отправлять почту.
2. Postfix
Postfix обладает всей мощью Sendmail, будучи полностью с ним совместимым, но при этом он гораздо проще в конфигурации. Кроме того, это мой любимый MTA, так что я не мог обойтись без описания его настройки. Итак (все действия производятся от имени root),
# apt-get install postfix
Скопируем главный настроечный файл postfix в нужное место (почему-то в Kubuntu он не устанавливается по-умолчанию)
# cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
В конец этого файла добавим несколько строк, чтобы настроить доставку почты через gmail.
relayhost = smtp.gmail.com:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail_passwd
smtp_sasl_security_options = noanonymous
Теперь создадим указанный нами файл авторизации
# touch /etc/postfix/gmail_passwd
и добавим в него наши логин и пароль на gmail (my.name заменяем на логин, а password - на пароль).
smtp.gmail.com:587 my.name@gmail.com:password
Преобразуем этот файл в нужный формат (BDB) и для пущей безопасности защитим его от доступа простых смертных.
# postmap /etc/postfix/gmail_passwd
# chown root:postfix /etc/postfix/gmail_passwd*
# chmod 0640 /etc/postfix/gmail_passwd*
Перезапускаем Postfix для применения изменений.
# /etc/init.d/postfix restart
Настройка закончена. MTA готов к отправке почты через gmail.
3. Exim
Exim - один из самых популярных (и мощных) MTA. Именно его мне советовала Kubuntu при установке Mutt. Кроме того, exim уже упоминался в этом блоге, так что описание его настройки вполне закономерно. Итак (всё делаем с правами root),
# apt-get install exim4
Отредактируем следующие параметры в файле /etc/exim4/update-exim4.conf.conf, чтобы отправлять почту через gmail
dc_eximconfig_configtype='smarthost'
dc_smarthost='smtp.gmail.com::587'
В файл авторизации /etc/exim4/passwd.client добавим следующие строки (подставляем свои логин и пароль вместо my.name и password соответственно)
gmail-smtp.l.google.com:my.name@gmail.com:password
*.google.com:my.name@gmail.com:password
smtp.gmail.com:my.name@gmail.com:password
Выполним следующую команду для применения новых настроек
# update-exim4.conf
На этом настройка завершена. Exim будет отправлять почту через gmail.
4. Msmtp
Как справедливо заметил Che (см. комментарии после статьи), использовать такие мощные MTA, как три предыдущие, в данной ситуации не рационально. Поэтому в данном случае, msmtp ничем не хуже остальных. Конечно, на его основе нельзя построить полноценный почтовый сервер, но ведь в данном случае это и не требуется. Итак (на этот раз всё выполняем от имени обычного пользователя),
$ sudo apt-get install msmtp
Создаем локальный файл настройки
$ touch ~/.msmtprc
и добавляем в него следующие строки (подставляем вместо my.name свой логин на gmail, а вместо password - пароль)
account default
host smtp.gmail.com
port 587
auth on
tls on
tls_starttls on
tls_certcheck off
from my.name@gmail.com
user my.name@gmail.com
password password
Ограничим права на ~/.msmtprc
$ chmod 600 ~/.msmtprc
Теперь создадим символическую ссылку на msmtp, чтобы не менять настройки mutt
$ sudo ln -s /usr/bin/msmtp /usr/sbin/sendmail
И на этом настройка завершена. Можно отправлять почту.
Ну вот пока и всё. Если вдруг вашего любимого MTA в этой статье не оказалось, то, как говорит Raa, пишите - и да будете отвечены! :)
понедельник, 7 апреля 2008 г.
Подписаться на:
Комментарии к сообщению (Atom)
Мне все таки кажется, что использовать полновесный MTA не на сервере - идея не слишком здравая :)
ОтветитьУдалитьКогда-то давно я использовал postfix на локальной машине, но потом понял, что это как из пушки по воробьям стрелять :)
Все таки на рабочей станции больше подходят более простые вещи. Типа msmtp.
А это чем не "механизм"?
ОтветитьУдалитьhttp://www.mutt.org/doc/devel/manual.html#smtp
Мут хорош не только тем, что он консольный :)
А как на счет того что посто при сборки пакета mutt собрать с imap и все нормально )
ОтветитьУдалитьКак связанна отправка почты с imap?
ОтветитьУдалить> Мне все таки кажется, что использовать полновесный MTA не на сервере - идея не слишком здравая :)
ОтветитьУдалитьПолностью согласен. Первоначально в статье было задумано описать четыре MTA и последним должен был быть как раз очень легкий nullmailer, но в последний момент оказалось, что он не поддерживает TLS, а значит с gmail работать не сможет.
> Все таки на рабочей станции больше подходят более простые вещи. Типа msmtp.
Статья дополнена описанием msmtp
> А это чем не "механизм"?
ОтветитьУдалить> http://www.mutt.org/doc/devel/manual.html#smtp
Очевидно, я немного отстал от жизни. Текст вступления исправлен с учетом свежей информации. К сожалению, данное решение не вписывается в тему статьи, так что я опишу его в этом комментарии.
Итак, mutt может отправлять почту непосредственно через gmail (или другой smtp сервер). Для этого достаточно добавить всего одну строчку в /etc/Muttrc или ~/.muttrc (или же ~/.mutt/muttrc)
set smtp_url=smtp://my.name:password.gmail.com:587/
Данный пример приводится, естественно, для gmail. Я бы рекомендовал эту строчку добавлять не в глобальный файл, а в ~/.muttrc, так как эта строка содержит логин и пароль в явном виде. И для пущей безопасности сделать
$ chmod 600 ~/.muttrc
> Мут хорош не только тем, что он консольный :)
Я писал, что это главное преимущество, а не единственное. Читайте внимательнее :)
> А как на счет того что посто при сборки пакета mutt собрать с imap и все нормально )
ОтветитьУдалитьА зачем его вообще собирать, если пакет из репозитория отлично работает? И при чём здесь imap?
В принципе, собирать есть смысл. Я, например, собираю. По двум причинам:
ОтветитьУдалить1. В репозитарии не слишком свежий пакет.
2. Я использую патч sidebar. Очень удобная штука. http://lunar-linux.org/index.php?page=mutt-sidebar
> В принципе, собирать есть смысл.
ОтветитьУдалитьЭто, конечно, личное дело каждого. Некоторые вещи я тоже собираю, но в случае mutt меня и так всё устраивает, тем более что использую я его не так часто и большей частью на работе.
Спасибо, Mak_s, давно хотел с этим разобраться :-)
ОтветитьУдалить> А это чем не "механизм"?
> http://www.mutt.org/doc/devel/manual.html#smtp
Если убрать из заголовка слово Mutt, тогда все станет на свои места. Почта может отправляться из консоли при помощи другой утилиты, использующей MTA:
http://debback.blogspot.com/2008/03/blog-post.html
Или же автоматически какой-либо программой, использующей все тот же MTA, как в случае с cron'ом:
http://debback.blogspot.com/2008/02/cron-mailto-exim.html
> Если убрать из заголовка слово Mutt, тогда все станет на свои места.
ОтветитьУдалитьМожно было бы так и сделать. Но ведь придется всё вступление переписывать (и еще некоторые места), а я и так писал статью больше месяца :)
> Можно было бы так и сделать. Но ведь придется всё вступление переписывать (и еще некоторые места), а я и так писал статью больше месяца :)
ОтветитьУдалитьПросто я имел в виду, что статья вовсе не стала бесполезной из-за того, что в Mutt можно указать SMTP сервер. Пусть все остается как есть :-)
2Mak_s
ОтветитьУдалитьпоставил mutt
установил переменную smtp_url
но прои попытке отправки пишет
Error in /root/.muttrc, line 1: smtp_url: unknown variable
source: errors in /root/.muttrc
и отсылает через sendmail
в чем прикол???
2Сергей
ОтветитьУдалитьПри такой скудной информации трудно что-то ответить (у меня никакой ошибки не возникало). Так что для начала несколько вопросов: Версия ОС? Версия Mutt? Как этот Mutt ставился (из репозитория, сторонних пакетов или собирался из исходников)? Какие параметры использовались при установке/сборке (по-умолчанию или что-то дополнительно)?
2Сергей
ОтветитьУдалитьИ еще не помешало бы показать файл /root/.muttrc :-)
Спасибо :)
ОтветитьУдалитьАвтор, спасибо тебе.
ОтветитьУдалитьВсё заработало с первого раза.
А я уж было предвкушал, что полвечера буду разбираться, как почту через гугловский SSL SMTP отправлять. )))
Настроил свой postfix в два счета! Спасибо.
ОтветитьУдалитьНастроил через Exim.
ОтветитьУдалитьЕдинственная проблема: Google, с…обака, переписывает заголовки From, Return-Path и т.п. на оригинальный адрес отправителя.
Ни переписывание хеадеров при отправке письма, ни даже параметр “-f{$from}” не помогают.
При этом Exim обрабатывает правильно:
2011-02-02 10:24:02 1PkX4M-0001Nk-FJ <= from@bk.ru U=www-data P=local S=661
2011-02-02 10:24:03 1PkX4M-0001Nk-FJ => to@domain.ru R=smarthost T=remote_smtp_smarthost H=gmail-smtp-msa.l.google.com [209.85.225.109] X=TLS1...
2011-02-02 10:24:03 1PkX4M-0001Nk-FJ Completed
Но почта на ящик приходит не от from@bk.ru, а от того ящика gmail, на который настроен Exim (типа vasya.pupkin@gmail.com).
Даже не знаю, как с этим бороться. Кто что может посоветовать?
Спасибо за статью, очень полезная )))
ОтветитьУдалитьА вы не когда не пробовали SSMTP ?
использовал связку mutt+msmtp, так как считаю лишним на серваке иметь монструозное МТА всего лишь для отправки логов по почте.
ОтветитьУдалитьавтору респект
Подскажите пожалуйса, а если хостинг и много аккаунтов. И нужно иметь возможность чтобы авторизация происходила по разным smpt серверам с разными логинами и паролями и соответственно отправлялась с разных ящиков, что важно с реальными именами, причём всегда от пользователя Apache.
ОтветитьУдалитьКак сделать, так чтобы из From передавалось имя а e-mail подменялся. Какой MTA в данном случаи лучше использоваться.
Фактически нужно чтобы MTA определял с какого сервера отправлять и с каким логином и паролям исходя из заголовков FROM. Причём оставляя при этом имя не тронутым а подменяя только e-mail. Может быть есть какие то другие варианты?
Операционная система Centos 6x64 и Centos 7
Пояснение к предыдущему комментарию: имеется ввиду что все хостинг аккаунты работают от пользователя apache
ОтветитьУдалить