Как отправить почту из командной строки?


216

Как отправить почту из командной строки?



1
Вы также можете использовать сосну.
Каве

1
Вы также можете установить msmtp и следовать инструкциям, описанным в ArchWiki
Thiago Perrotta

2
Жаль, что ответы на это так устарели. Это важный вопрос, который можно использовать хороший учебник
6005

Ответы:


37

Попробуйте установить почтовый клиент Mutt . Другой вариант - использовать emacs с gnus . Также доступны другие варианты ... ИМХО, вы должны использовать более подробную информацию в своих вопросах, или вы получите несколько разных ответов на ваш вопрос :-)


2
Принят этот, так как он не требует никакой настройки и довольно удобен для пользователя.
Оливье Лалонд,

21
Подождите. Mutt - удобный для пользователя? самая сумасшедшая строчка, которую я читал сегодня :)
Stann

156
  1. Установите ssmtp Установить ssmtp :

    sudo apt-get install ssmtp
    
  2. Отредактируйте файл конфигурации ssmtp:

    gksu gedit /etc/ssmtp/ssmtp.conf
    
  3. Добавьте следующий текст:

    root=username@gmail.com
    mailhub=smtp.gmail.com:465
    rewriteDomain=gmail.com
    AuthUser=username
    AuthPass=password
    FromLineOverride=YES
    UseTLS=YES
    
  4. Запустите ssmtp и укажите адрес электронной почты получателя:

    ssmtp recepient_name@gmail.com
    
  5. Укажите данные сообщения следующим образом:

    To: recipient_name@gmail.com
    From: username@gmail.com
    Subject: Sent from a terminal!
    
    Your content goes here. Lorem ipsum dolor sit amet, consectetur adipisicing.
    (Notice the blank space between the subject and the body.)
    
  6. Нажмите Ctrl+, Dчтобы отправить.


Вы также можете поместить текст в файл и отправить его следующим образом:

ssmtp recipient_name@gmail.com < filename.txt

29
Мне кажется странным оставлять мой пароль электронной почты открытым в каком-то файле на компьютере. Это безопасно?
oadams

2
@oadams не очень безопасно. Используйте двухэтапную проверку, чтобы снизить риск, или используйте почтовый шлюз, для которого не требуется пароль, как у вашего интернет-провайдера.
itadok

5
Не устанавливайте ssmtp на сервер с установленным постфиксом. Постфикс будет удален. Вместо этого просто используйте sendmail user@example.com <file.txt, который будет работать с postfix или ssmtp.
Алистер Бакстон

2
Еще одна странная вещь, которой я хотел бы поделиться здесь, это то, что у меня не получилось, когда у меня был длинный / сложный пароль, но сработало, когда я изменил его на простой пароль, странный, но верный. Я также слышал то же самое от кого-то другого, но попробовал это после множества неудачных попыток отправить почту, и, как только я упростил пароль, к моему удивлению, это просто сработало;)
Раджат Гупта

Если Gmail не разрешает доступ к вашему серверу, войдите в Gmail на сервере через браузер командной строки. askubuntu.com/questions/460022/using-terminal-as-a-web-browser
Санхьюн Ли

87

В большинстве случаев вам не нужно настраивать SMTP-сервер, который вы можете просто использовать mailиз командной строки (если его еще нет, установите с помощью sudo apt-get install mailutils). (Или если вы находитесь на сервере, где настроен sendmail и т. Д.)

marco@dagobah:~$ mail -v marco.ceppi.use@gmail.com
Subject: Hello World!
This is an email to myself.

Hope all is well.
.
Cc: 

Вы заканчиваете сообщения с одним .на линии. Именно тогда mailвам будет предложено Cc:ввести информацию (или оставить пустым), а mailзатем распечатает дополнительную информацию о том, что он пытается сделать, а также подробную информацию об обработке подключения, передачи и получения данных с почтового сервера.


28
Я бы добавил ответ, включив в него «sudo apt-get install mailutils», поскольку его нет в чистой установке Ubuntu 10.04. Кроме того, завершение сообщения с помощью. ни на одной строке не работал. Я должен был "Ctrl-D" вместо этого. Наконец, сообщение не прошло!
Оливье Лалонд

7
@OlivierLalonde sudo apt-get install mailutilsустановит SMTP-сервер postfix, который может быть немного переоценен для некоторых людей.
Вааб

5
mailutils также установит mysql!
chmike

17
Опция -v отсутствует в моей установке почты 2.99.98, также пришлось использовать Ctrl + D для завершения
markmnl

2
Пожалуйста, обновите этот вопрос, он устарел.
phil294

47
apt-get install libio-socket-ssl-perl libnet-ssleay-perl sendemail

использование:

sendemail -f fromuser@gmail.com -t touser@domain.com -u subject -m "message" -s smtp.gmail.com:587 -o tls=yes -xu gmailaccount@gmail.com -xp gmailpassword 

Если вы не хотите указывать свой пароль в командной строке (как правило, это не очень хорошая вещь), вы можете опустить этот параметр, и sendemail запросит у вас пароль ... и отобразит его на экране, но по крайней мере это не будет в вашей истории командной строки.


Отправка почты из учетной записи GMail с sendmailнаибольшей уверенностью очень удобна. Спасибо.
Марк Томлин

Найти патч здесь не повторить пароль.
Арун

Я должен был указать порт с -s smtp.gmail.com:587.
Джо Морнин

5
добавить пробел перед командной строкой, чтобы не сохранять его в истории командной строки
guhur

другой способ , чтобы не отображать его на экране Баш: сохранить пароль в файл, а затем из файла в переменной окружения, экс: pass=$(cat my_password); sendemail... -xp $name ...и, конечно , если вы вызываете его программно вы можете сделать что - то подобное, пример: рубин system("sendemail ... -xp #{File.read 'my_password'}...")также может провалить В первый раз вы должны получить электронное письмо с этой учетной записью, предлагающее вам «включить менее безопасные приложения», чтобы оно могло работать.
rogerdpack

23

mpack - отличный способ командной строки для отправки файловых вложений.

apt-get install mpack

использование:

mpack -s "file you wanted" ./data.pdf loser@supergoober.cn

20

Вам нужен MTA для отправки почты. Для этого используйте постфикс:

sudo apt-get install postfix

Чтобы отправить электронное письмо:

echo "test message" | mailx -s 'test subject' myemail@mydomain.com

ПОМОГИТЕ


Вам также нужно установить mailutils для mailx, верно?
Ник

4
Хотелось бы, чтобы все было так просто, но если вы не особенный человек, это не сработает. 99,9999% интернет-провайдеров будут игнорировать почту с частных постфиксных серверов, потому что 9,99999 из 10 являются спамерами.
Церин

это не сработало для меня, оно попросило установить, mailutilsкогда я ввел это в терминал
Мостафиз Рахман

Идите вперед и установите mailutils. Вам не нужен постфикс IIRC.
Uav

@ Церин права. Мне нужна была очень простая функция рассылки для работы cron. В качестве обходного пути, если вы получаете через учетную запись Gmail, вы можете настроить фильтр для электронной почты (через ключевые слова или адрес отправителя), и Gmail позволит отправлять его.
Кэрри Кендалл

15

Установите пакет и sendmailвведите

sendmail -t receiver@example 

затем напишите свою электронную почту, затем нажмите Ctrl + D


10
mail -s "subjet" -a "attchedfile_name" someone@dest_email.com

или же

cat "afile" | mail -s "subject" someone@dest_email.com

просто добавить для легкого тестирования: эхо "Hello world!" | Почты -s "Hello" mail@example.org
Bohne

2
Если у кого-то нет команды mail, просто запустите: sudo apt-get install mailutilsв Ubuntu / Debian или yum install mailxв CentOS / Redhat
Giovanni Benussi

9

Вы можете отправить электронное письмо из командной строки с помощью TelNet или NetCat .

Все объясняется здесь .

hanoo@hp_laptop% nc 127.0.0.1 25
220 hp_laptop.localdomain ESMTP Postfix
EHLO man
250 hp_laptop.localdomain
MAIL FROM: <netcat@postfix.com>
250 2.1.0 Ok
RCPT TO: <target@host.com>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
This is the body of my mail,
this is the second line...
.
250 2.0.0 Ok: queued as 9C12E7F404

2
При использовании этого метода немного сложно использовать SSL;)
iX3

1
@ iX3 просто используйте, swaksи вы тоже хорошо с SSL / TLS ;-)
Джермар

Илиopenssl s_client -starttls smtp ...
Раман

7

Если вы пытаетесь отправить электронную почту из системы, которая не запускает собственный почтовый сервер (например, настольную систему), вам необходимо установить что-то вроде nullmailer или esmtp , которые пересылают вашу локальную почту на «настоящую» почту сервер.

В качестве инструментов командной строки вы можете установить mail или mailx (пакеты mailutils, heirloom-mailx или bsd-mailx). Если вам нужны вложения, попробуйте biabam.


1
Мне нравится bsd-mailx для команды -E и cronjobs
эффект

6

Я никогда не пробовал, но есть mailкоманда, которая может отправлять почту. Смотри мужскую почту .

Чтобы проверить местную электронную почту:

echo message | mail username@localhost

6
sudo apt-get install sharutils mailutils
uuencode filename filename | mail user@example.com

где filenameто же самое: оно обозначает входной файл и удаленный файл.


sudo apt-get install sharutilsдляuuencode
Янус Троелсен

1
mailutils устанавливает mysql! oO
chmike

3

Вы можете попробовать это:

mail name@mailserver.com -s "Attached file" <<EOF                 
Hi

~| uuencode $HOME/filename.txt filename.txt

EOF

Он работает с GNU Mailutils , проверьте веб-сайт для получения дополнительной информации.


2

Выполнить :

sudo apt-get install ssmtp
sudo -H gedit /etc/ssmtp/ssmtp.conf

Необходимо добавить следующее:

# The user that gets all the mails (UID < 1000, usually the admin)
root=yourusernameofgmail@gmail.com

# The mail server (where the mail is sent to), both port 465 or 587 should be acceptable
# See also https://support.google.com/mail/answer/78799
mailhub=smtp.gmail.com:587

# The address where the mail appears to come from for user authentication.
rewriteDomain=gmail.com

# Use SSL/TLS before starting negotiation
UseTLS=Yes
UseSTARTTLS=Yes

# Username/Password
AuthUser=yourusernameofgmail
AuthPass=yourGmailPassowrd
AuthMethod=LOGIN

# Email 'From header's can override the default domain?
FromLineOverride=yes

Выполнить :

sudo -H gedit /etc/ssmtp/revaliases

Введите там:

root:yourusernameofgmail@gmail.com:smtp.gmail.com:587

Включите "менее безопасные приложения" в Gmail:
https://support.google.com/accounts/answer/6010255?hl=ru.

Проверьте это, запустив на терминале следующее:

echo "Body of mail is abc" | mail -s "Subject is xyz" "someusername@gmail.com"`

1

В дополнение к вышеупомянутому я все еще получал эту ошибку

echo "Test message from Linux server using ssmtp" | sudo ssmtp -vvv  somebody@mil.gov
[<-] 220 smtp.gmail.com ESMTP v193sm19198825qka.18 - gsmtp
[->] EHLO localhost
[<-] 250 SMTPUTF8
[->] STARTTLS
[<-] 220 2.0.0 Ready to start TLS
[->] EHLO localhost
[<-] 250 SMTPUTF8
[->] AUTH LOGIN
[<-] 334 VXNlcm5hbWU6
[->] aG94Z2VuZUBrrrFpbC5jb20=
[<-] 334 UGFzweliecmQ6
[<-] 534 5.7.14  https://support.google.com/mail/answer/78754 v193sm19198825qka.18 - gsmtp
ssmtp: Authorization failed (534 5.7.14  https://support.google.com/mail/answer/78754 v193sm19198825qka.18 - gsmtp)

РЕШЕНИЕ: сделать сброс пароля Gmail, даже если текущий пароль правильный ... возможно, меры предосторожности Google

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.