Come posso inviare un'e-mail tramite il comando mailx di UNIX?


Risposte:


108

un esempio

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

per inviare allegato

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

e per inviare l'allegato E scrivere il corpo del messaggio

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

4
L'ho provato ma non ha dato risposta. Né sta dando qualche messaggio di errore né inviando la posta a myname@gmail.com. È necessaria una configurazione del server?
user269484

2
non è necessaria alcuna configurazione. Controlla la tua connessione Internet. Ho una connessione diretta a Internet tramite cavo, non uso proxy o altro quindi funziona dalla mia parte.
ghostdog74

2
Dovresti anche controllare i messaggi di errore nella tua posta in arrivo. Cioè corri mail.
hafichuk

2
Si noti, tuttavia, che uuencodeè una tecnologia ereditata da un millennio passato che non produce ciò che oggi intendiamo per "attaccamento". Fondamentalmente mette un pezzo di confusione leggibile dalla macchina alla fine del testo del messaggio. Al giorno d'oggi, sareste serviti meglio da un mailer adeguatamente consapevole di MIME. Sfortunatamente, non esiste una mailxsostituzione universalmente supportata con le funzionalità MIME, ma se lo hai mutt, è probabilmente il percorso di minor resistenza.
tripleee

5
@ user269484 Gmail non accetta email da indirizzi IP non autorizzati. Leggi support.google.com/mail/answer/10336
Manas Jayanth

33

Ecco qui :

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

PS. Corpo e soggetto devono essere mantenuti tra virgolette doppie. Rimuovi le virgolette da FROM_EMAILe To_EMAILdurante la sostituzione degli indirizzi email.


1
Su Mac riceverai un errore dal comando mailx se usi -r mailx: opzione illegale - r Uso: mailx [-EiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [ -F] to-addr ... mailx [-EHiInNv] [-F] -f [nome] mailx [-EHiInNv] [-F] [-u utente] mailx -e [-f nome] mailx -H
jcpennypincher

potresti fare -S from=a@b.com
Soni

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

tramite mailxutility possiamo inviare un file da unixa mail server. qui nel codice sopra possiamo vedere il primo parametro è -s "subject of mail" il secondo parametro è mail IDe l'ultimo parametro è il nome del file che vogliamo allegare


1
Questo non allega il file, inserisce il contenuto del file nel corpo
Guus

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

-c e -b sono opzionali.

-s: specifica l'oggetto; se l'oggetto contiene spazi, usa le virgolette.

-c: invia copie per conoscenza a un elenco di utenti separati da virgola.

-b: Invia copie per conoscenza nascoste all'elenco di utenti separati da virgola.

Spero che la mia risposta chiarisca il tuo dubbio.


5

È più veloce con il comando 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 email cc list
  2. -s lista soggetti
  3. -y per inviare la posta

4

Dalla pagina man:

Invio di posta

Per inviare un messaggio a una o più persone, mailx può essere invocato con argomenti che sono i nomi delle persone a cui verrà inviata la posta. L'utente deve quindi digitare il suo messaggio, seguito da un "control-D" all'inizio di una riga.

In altre parole, mailx legge il contenuto da inviare dallo standard input e può essere reindirizzato come al solito. Per esempio:

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

Personalizzazione dell'indirizzo FROM

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

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

Un'eccezione da man mail: -f [file] Legge il contenuto della mbox dell'utente (o del file specificato) per l'elaborazione; quando mailx viene chiuso, riscrive i messaggi non cancellati in questo file. Il file stringa viene gestito come descritto per il comando cartella di seguito.
ZJ Lyu

Dipende dalla versione che stai utilizzando. Esistono più comandi maile concorrenti incompatibili mailxcon opzioni diverse.
tripleee

1

Ecco una funzione multifunzionale per affrontare l'invio di posta con diversi allegati:

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}
}

chiamata di funzione: enviaremail "smtp.mailserver: port" "from_address" "authuser" "'pass'" "destination" "elenco di allegati separati da spazio"

Nota: rimuovere le virgolette doppie nella chiamata

Inoltre ricordati di definire esternamente $ titulo (oggetto) e $ cuerpo (corpo) dell'email prima di utilizzare la funzione


0

Se vuoi inviare più di due persone o DL:

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

Qui:

  • -s = oggetto o titolo dell'email
  • -r = mittente posta o DL

Puoi spiegare perché l'eco viene utilizzato per passare il corpo di un messaggio? Se lo ometto ed eseguo da MailX, il cursore lampeggia come se fosse in attesa di un input.
LonelyRogue,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.