Как я могу отправить электронное письмо с помощью команды UNIX mailx?


92

Как я могу отправить электронное письмо с помощью команды UNIX mailx?

Ответы:


109

пример

$ echo "something" | mailx -s "subject" recipient@somewhere.com

отправить вложение

$ uuencode file file | mailx -s "subject" recipient@somewhere.com

и отправить вложение И написать тело сообщения

$ (echo "something\n" ; uuencode file file) | mailx -s "subject" recipient@somewhere.com

4
Я попробовал, но ответа нет. Ни он не выдает сообщение об ошибке, ни отправляет почту на myname@gmail.com. Есть ли необходимость в конфигурации сервера?
user269484

2
нет необходимости в какой-либо настройке. Проверьте ваше интернет-соединение. У меня есть прямое подключение к Интернету через кабель, я не использую прокси-серверы или что-то еще, поэтому он работает на моей стороне.
ghostdog74

2
Вы также должны проверить сообщения об ошибках в своем почтовом ящике. Т.е. беги mail.
hafichuk

2
Обратите внимание, однако, что uuencodeэто унаследованная технология из прошлого тысячелетия, которая не дает того, что мы сегодня подразумеваем под «привязанностями». По сути, он помещает машиночитаемый беспорядок в конец текста сообщения. В наши дни вам будет лучше обслуживать почтовую программу, которая поддерживает MIME. К сожалению, не существует универсально поддерживаемой mailxзамены функциями MIME, но если да mutt, то это, вероятно, путь наименьшего сопротивления.
tripleee 01

5
@ user269484 Gmail не принимает электронную почту с неавторизованных IP-адресов. Прочтите support.google.com/mail/answer/10336

34

Вот, пожалуйста :

echo "Body" | mailx -r "FROM_EMAIL" -s "SUBJECT" "To_EMAIL"

PS. Текст и тему следует заключать в двойные кавычки. Удалите цитаты из адресов электронной почты FROM_EMAILи To_EMAILпри подстановке их.


1
На Mac вы получите сообщение об ошибке от команды mailx, если вы используете -r mailx: незаконный параметр - r Использование: mailx [-EiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [ -F] адрес-адрес ... mailx [-EHiInNv] [-F] -f [имя] mailx [-EHiInNv] [-F] [-u пользователь] mailx -e [-f имя] mailx -H
jcpennypincher

вы могли бы сделать -S from=a@b.com
Kalpesh Soni

6
mailx -s "subjec_of_mail" abc@domail.com < file_name

через mailxутилиту мы можем отправить файл из unixв mail server. здесь, в коде выше, мы видим, что первый параметр - -s "subject of mail" это второй параметр, mail IDа последний параметр - это имя файла, который мы хотим прикрепить


1
Это не прикрепляет файл, а помещает содержимое файла в тело
Гус

5
mail [-s subject] [-c ccaddress] [-b bccaddress] toaddress

-c и -b необязательны.

-s: указать тему; если тема содержит пробелы, используйте кавычки.

-c: отправлять копии в список пользователей через запятую.

-b: отправлять скрытые копии в список пользователей через запятую.

Надеюсь, мой ответ проясняет ваши сомнения.


5

Это быстрее с командой MUTT

echo "Body Of the Email"  | mutt -a "File_Attachment.csv" -s "Daily Report for $(date)"  -c cc_mail@g.com to_mail@g.com -y
  1. -c список копий электронной почты
  2. -s список тем
  3. -у отправить почту

Мне пришлось разделить вложения echo "" | mutt -s "test" -a ./file -- name@mail.com -y
знаком

4

На странице руководства:

Отправка почты

Чтобы отправить сообщение одному или нескольким людям, mailx может быть вызван с аргументами, которые являются именами людей, которым будет отправлено письмо. Затем ожидается, что пользователь наберет свое сообщение, за которым следует «Ctrl-D» в начале строки.

Другими словами, mailx считывает содержимое для отправки со стандартного ввода и может быть перенаправлено как обычно. Например:

ls -l $HOME | mailx -s "The content of my home directory" someone@email.adr

3
echo "Sending emails ..."
NOW=$(date +"%F %H:%M")
echo $NOW  " Running service" >> open_files.log
header=`echo "Service Restarting: " $NOW`


mail -s "$header" abc.xyz@google.com,   \
              cde.mno@yahoo.com, \ < open_files.log

1

Настройка адреса ОТ

MESSAGE="SOME MESSAGE"
SUBJECT="SOME SUBJECT"
TOADDR="u@u.com"
FROM="DONOTREPLY"

echo $MESSAGE | mail  -s "$SUBJECT" $TOADDR  -- -f $FROM

An except from man mail: -f [file] Прочитать содержимое mbox пользователя (или указанного файла) для обработки; при выходе из mailx он записывает восстановленные сообщения обратно в этот файл. Строковый файл обрабатывается, как описано для команды папки ниже.
ZJ

Это зависит от того, какую версию вы используете. Есть несколько несовместимых конкурирующих команд mailи mailxкоманд с разными опциями.
Tripleee

1

Вот многофункциональная функция для отправки почты с несколькими вложениями:

enviaremail() {
values=$(echo "$@" | tr -d '\n')
listargs=()
listargs+=($values)
heirloom-mailx $( attachment=""
for (( a = 5; a < ${#listargs[@]}; a++ )); do
attachment=$(echo "-a ${listargs[a]} ")
echo "${attachment}"
done) -v -s "${titulo}" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://$1 \
-S from="${2}" \
-S smtp-auth-user=$3 \
-S smtp-auth-password=$4 \
-S ssl-verify=ignore \
$5 < ${cuerpo}
}

вызов функции: enviaremail "smtp.mailserver: port" "from_address" "authuser" "'pass'" "destination" "список вложений, разделенных пробелом"

Примечание. Удалите двойные кавычки в вызове.

Кроме того, не забудьте определить внешние $ titulo (тема) и $ cuerpo (тело) электронного письма перед использованием функции.


0

Если вы хотите отправить более двух человек или DL:

echo "Message Body" | mailx -s "Message Title" -r sender@someone.com receiver1@someone.com,receiver_dl@.com

Вот:

  • -s = тема или заголовок письма
  • -r = письмо отправителя или DL

Не могли бы вы объяснить, почему эхо используется для передачи тела сообщения? Если я пропущу это и выполню из MailX, курсор будет мигать, как будто ожидая ввода.
LonelyRogue,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.