LINUX.ORG.RU

Как послать email из консоли?


0

0

В целях автоматизации хочу научиться отправлять из консоли/скриптов имэйлы.

Постановка задачи: есть мой ящик AAA@gmail.com, адрес получателя BBB@gmail.com, есть файл, который надо отправить, текст и тема письма. Что надо сделать, чтобы письмо ушло?

★★

Ответ на: комментарий от MikeDM

Читаю про mail:

http://debback.blogspot.com/2008/03/blog-post.html

Для отправки письма пишем следующую команду:

$ mail -s "Тема письма" pupkin@mail.ru Привет! Я пишу тебе из консоли! Ctrl+D

Сразу непонятно: к какого адреса оно собирается отсылать? Там по конфигу полагается писать ради каждого аккаунта?

fffgh ★★
() автор топика
Ответ на: комментарий от MikeDM

С телнетом на первый взгляд правильнее, но куча мороки также присутствует.

Сам телнет с гуглом работать не может. Описание проблемы и решение: http://groups.google.com/group/Gmail-Users/browse_thread/thread/dc8dca5cee9bb868

Подключаюсь через
stunnel -d 25 -cr smtp.gmail.com:465
telnet localhost 25

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

Выглядит так:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 debian-desktop ESMTP Exim 4.69 Fri, 13 Mar 2009 10:47:02 +0700
ehlo gmail.com
250-debian-desktop Hello localhost [127.0.0.1]
250-SIZE 52428800
250-PIPELINING
250 HELP
MAIL FROM: AAA@gmail.com
250 OK
rcpt to: BBB@gmail.com
250 Accepted
data
354 Enter message, ending with "." on a line by itself
EMAIL!!!
.
250 OK id=1LhyNo-0002Di-Au
quit
221 debian-desktop closing connection
Connection closed by foreign host.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

> Сразу непонятно: к какого адреса оно собирается отсылать? Там по
> конфигу полагается писать ради каждого аккаунта?

(простейший вариант)

1) Устанавливаешь ssmtp.

2) В /etc/ssmtp/ssmtp.conf:

root=vasyapupkin@mail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=vasyapupkin@gmail.com
FromLineOverride=YES
UseTLS=YES
UseSTARTTLS=YES
AuthUser=vasyapupkin@gmail.com
AuthPass=qwerty
# Это пример для отправки через аккуант на gmail.

3) В /etc/ssmtp/ssmtp.conf

root:vasyapupkin@gmail.com:smtp.gmail.com:587
vp:vasyapupkin@gmail.com:smtp.gmail.com:587
# Это соответствия аккуантов пользователей в системе с адресами с
# которых производится отправка. "vp" замени на своё имя пользователя
# на своей системе

4) Устанавливаешь nail.

5) По умолчанию nail должен использовать для отправки
/usr/bin/sendmail, который в данном случае является симлинком на
ssmtp, так что уже всё должно работать:

echo 'Hello!' | nail -s 'Test 1 2 3...' vasyapupkin@gmail.com

В общем как-то так =).

Deleted
()
Ответ на: комментарий от Deleted

>(простейший вариант)

*Офигевает от простоты*

Ё-моё, в каком году люди придумали почту из консоли слать? Почему же до сих пор все так муторно?

>1) Устанавливаешь ssmtp.

>2) В /etc/ssmtp/ssmtp.conf:

Про выполнение на чужой машине сразу надо забыть.

>AuthPass=qwerty

Вот этот момент очень нравится, да.

Давайте лучше про telnet, он вроде ближе к адекватному восприятию реальности.

fffgh ★★
() автор топика

Далее про телнет: я вот не пойму, почему в руководствах по отправке им почты не пишут про логин и пароль? Это авторы такие умные, или я чего-то не понимаю?

Вот, например:

http://www.wikihow.com/Send-Email-Using-Telnet

http://www.openkazan.info/smtp-pop3-telnet-mail

Ну ладно, нашёл руководство, где это упомянули:

http://www.milgroup.com.ua/forum/index.php?showtopic=23

Попробовал - опять не работает:

helo gmail.com
250 debian-desktop Hello localhost [127.0.0.1]
auth login
503 AUTH command used when not advertised

И чего теперь делать?

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

>> AuthPass=qwerty
> Вот этот момент очень нравится, да.


Чем понравился. Расскажите, посмеёмся вместе =).

Deleted
()
Ответ на: комментарий от Deleted

>Чем понравился. Расскажите, посмеёмся вместе =).

Тем, что пароль у всех на виду лежит. Можно уже смеяться.

fffgh ★★
() автор топика
Ответ на: комментарий от JB

sendEmail хороший скрипт, умеет даже с аттачментами

Sylvia ★★★★★
()
Ответ на: комментарий от fffgh

>> http://caspian.dotconf.net/menu/Software/SendEmail/
> Во! То, что надо.


Только вот это вряд ли сработает, если почту должны отправлять демоны, в которых зашито использование sendmail. Хотя если это не нужно, то этот вариант будет даже лучше.

Deleted
()
Ответ на: комментарий от fffgh

> Тем, что пароль у всех на виду лежит. Можно уже смеяться.

Ахахахахаааа, действительно как же смешно!

$ ls -lh /etc/ssmtp/ssmtp.conf
-rw-r----- 1 root ssmtp 1,5K Янв 21 14:30 /etc/ssmtp/ssmtp.conf

Слив засчитан.

Deleted
()

в дебиане есть два замечательных пакета:

mime-construct позволяет создавать валидные письма с вложениями
msmtp эти письма отсылает

Пример:

TO=someone@some.where
FROM=my_box@gmail.com
mime-construct --output --subject "Mail with attachment" --to $TO --string "Body of the message" --file-attach /path/to/file/to/attach | msmtp --host=gmail-smtp-in.l.google.com --auth=on --from=$FROM --user=$FROM -- $TO

gorilych ★★
()

что может быть проще чем:
cat file | mail BBB@gmail.com

Komintern ★★★★★
()

sendEmail ругается аналогично телнету: STARTTLS + незнамо что с авторизацией.

Кто-нибудь может поделиться _практическим_ опытом его использования с более-менее известным сервисом (если не с самим гуглем)?

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

> Постановка задачи - в шапке топика.

Ну если только так. Я предлагал проверенное работающее решение.

Deleted
()
Ответ на: комментарий от fffgh

> sendEmail ругается аналогично телнету: STARTTLS + незнамо что с авторизацией.

Гуглепочта не пускает без шифрования. Попробуй добавить -o tls=yes (по умолчанию там стоит auto и должно всё работать). И проверь, что стоит пакет с поддержкой ssl/tls для перла, который нужен sendEmail'у для работы.

Deleted
()
Ответ на: комментарий от fffgh

> Дети, проходите мимо.

Дедуля, держать пароль в файле, который может прочитать только root, гораздо безопаснее, чем задавать его в строке параметров, которую могут видеть все.

=)

Deleted
()
Ответ на: комментарий от fffgh

Про TLS затупил. На главной у sendemail написано:

TLS Support
Starting with sendEmail v1.54, TLS support is included! To enable TLS support simply install the Net::SSLeay and IO::Socket::SSL perl modules. The following new command line parameters are now available:
    -o tls=auto This is the default, TLS will be used if possible.
    -o tls=yes Use this to require TLS for message delivery.
    -o tls=no Use this to disable TLS support.

Модули лежат в пакетах libnet-ssleay-perl и libio-socket-ssl-perl (Debian 5.0).

Слать письма командой: sendEmail -f AAA@gmail.com -t BBB@domain.com -u заголовок -m текст_письма -s smtp.gmail.com -xu AAA -xp пароль

-o tls=yes можно не писать.

fffgh ★★
() автор топика
Ответ на: комментарий от Deleted

>> Дети, проходите мимо.

>Дедуля...

Не хочется тебя разочаровывать, но ответ тот же.

fffgh ★★
() автор топика

В общем, sendemail работает как надо. Спасибо JB и другим отписавшимся.

Пароль убирал с помощью zenity, гуглящие могут взять на заметку.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

> Пароль убирал с помощью zenity, гуглящие могут взять на заметку.

Можно узнать каким образом?

Deleted
()
Ответ на: комментарий от fffgh

> sendEmail ... -xp $pass

Фокус в том, что подстановку параметров выполняет шелл, т.е. в данном случае в /proc/$PID/cmdline будет не $pass, а твой пароль открытым текстом. Без специальных патчей на ядро параметры командной строки могут видеть все пользователи в системе, поэтому чтобы узнать пароль, достаточно выловить момент в который запущен sendEmail.

Deleted
()
Ответ на: комментарий от Deleted

>в данном случае в /proc/$PID/cmdline будет не $pass, а твой пароль открытым текстом

Буду знать.

fffgh ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.