GNU/Linux >> Znalost Linux >  >> Linux

9 příkladů příkazů mail/mailx pro odesílání e-mailů z příkazového řádku v systému Linux

Odesílání e-mailů z příkazového řádku

Příkaz mail je nezbytný příkaz, který by měl být dostupný na jakémkoli linuxovém serveru, aby různé služby a další webové aplikace mohly generovat a přenášet e-maily.

V předchozím příspěvku o příkazu mail jsme viděli, jak lze příkaz mail použít k odesílání e-mailů z příkazového řádku na vašem linuxovém serveru.

V tomto tutoriálu budeme používat vylepšenou verzi příkazu mail. Nazývá se mailx (nebo jen mail, když je nainstalován) a umí mnohem víc věcí, než co umí starší příkaz mail z balíčku gnu mailutils.

Jak to funguje

Příkaz mail/mailx potřebuje k doručování e-mailů spuštěný místní smtp server (MTA). Trasa, kterou se e-mail ubírá, je asi tato -

mail -> sendmail -> local MTA -> recipient MTA [Inbox]

Příjemcem MTA by byl smtp server gmailu, pokud je vaším příjemcem například někdo z gmail.com. Pro místní MTA musíte nainstalovat smtp server, jako je Postfix. Základní instalace Postfixu s minimální konfigurací by ve většině případů fungovala.

Nainstalujte příkaz mailx

Na systémech založených na Ubuntu/Debianu je příkaz mailx dostupný ze 2 různých balíčků -

1. heirloom-mailx
2. bsd-mailx

Budeme používat balíček heirloom-mailx, protože má více funkcí a možností.
Na systémech založených na CentOS/Fedora existuje pouze jeden balíček s názvem "mailx", což je balíček heirloom.

Chcete-li zjistit, který balíček mailx je na vašem systému nainstalován, zkontrolujte výstup "man mailx" a přejděte dolů na konec a měli byste vidět některé užitečné informace.

# ubuntu/debian
$ sudo apt-get install heirloom-mailx
# fedora/centos
$ sudo yum install mailx

Pomocí příkazu mailx

Po instalaci lze na příkaz mailx přímo odkazovat jménem mail, takže jej stačí zadat do příkazového řádku.

1. Jednoduchá pošta

Spusťte následující příkaz a mailx bude čekat, až zadáte zprávu e-mailu. Pro nové řádky můžete stisknout Enter. Po dokončení psaní zprávy stiskněte Ctrl+D a mailx zobrazí EOT.

Poté mailx automaticky doručí e-mail na místo určení.

$ mail -s "This is the subject" [email protected]
Hi someone
How are you
I am fine
Bye
EOT

2. Převzít zprávu ze souboru

Tělo zprávy e-mailu lze také převzít ze souboru.

$ mail -s "This is Subject" [email protected] < /path/to/file

Zprávu lze také odeslat pomocí příkazu echo -

$ echo "This is message body" | mail -s "This is Subject" [email protected]

3. Více příjemců

Chcete-li odeslat e-mail více příjemcům, zadejte všechny e-maily oddělené čárkou

$ echo "This is message body" | mail -s "This is Subject" [email protected],[email protected]

4. Kopie a Skrytá kopie

Volby "-c" a "-b" lze použít k přidání adres CC a BCC.

$ echo "This is message body" | mail -s "This is Subject" -c [email protected] [email protected]

5. Zadejte jméno odesílatele a adresu

Chcete-li zadat jméno a adresu "OD", použijte volbu "-r". Za jménem by měla následovat adresa zabalená do "<>".

$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" [email protected]

6. Zadejte adresu pro odpověď

Odpověď na adresu se nastavuje pomocí interní proměnné volby "replyto" pomocí volby "-S".

# replyto email
$ echo "This is message" | mail -s "Testing replyto" -S replyto="[email protected]" [email protected]
# replyto email with a name
$ echo "This is message" | mail -s "Testing replyto" -S replyto="Mark<[email protected]>" [email protected]

7. Přílohy

Přílohy lze přidávat pomocí volby "-a".

$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" -a /path/to/file [email protected]

8. Použít externí SMTP server

Toto je exkluzivní funkce, kterou získáte pouze s heirloom mailx a ne bsd mailx nebo příkazem mail z gnu mailutils nebo příkazem mutt.

Příkaz mailx může použít externí smtp server k předání zprávy dál. Syntaxe je trochu zdlouhavá, ale dává smysl.

$ echo "This is the message body and contains the message" | mailx -v -r "[email protected]" -s "This is the subject" -S smtp="mail.example.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="[email protected]" -S smtp-auth-password="abc123" -S ssl-verify=ignore [email protected]

Zde je rozpis

$ echo "This is the message body and contains the message" | mailx -v \
> -r "[email protected]" \
> -s "This is the subject" \
> -S smtp="mail.example.com:587" \
> -S smtp-use-starttls \
> -S smtp-auth=login \
> -S smtp-auth-user="[email protected]" \
> -S smtp-auth-password="abc123" \
> -S ssl-verify=ignore \
> [email protected]

Můžete používat smtp servery gmail a odesílat e-maily prostřednictvím svého účtu gmail. To je skvělé!
Konkrétně pro gmail byste museli povolit nastavení méně bezpečných aplikací, abyste mohli posílat e-maily takto.

9. Podrobný – sledujte smtp komunikaci

Při použití externích smtp serverů si můžete zvolit sledování celé smtp komunikace, která probíhá na pozadí. To je užitečné zejména při testování nebo ladění smtp serverů.

$ echo "This is the message body and contains the message from heirloom mailx" | mailx -v -s "This is the subject" -S smtp="smtp.gmail.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="[email protected]" -S smtp-auth-password="mypassword" -S ssl-verify=ignore [email protected]
Resolving host smtp.gmail.com . . . done.
Connecting to 74.125.68.109:587 . . . connected.
220 mx.google.com ESMTP je4sm32812877pbd.94 - gsmtp
>>> EHLO enlightened
250-mx.google.com at your service, [122.163.43.21]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO enlightened
250-mx.google.com at your service, [122.163.43.21]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
>>> AUTH LOGIN
334 VXNlcmU6
>>> YmnbWFpbC5jb20=
334 UGFzcmQ6
>>> KnJgzKg==
235 2.7.0 Accepted
>>> MAIL FROM:<[email protected]>
250 2.1.0 OK je4sm32812877pbd.94 - gsmtp
>>> RCPT TO:<[email protected]>
250 2.1.5 OK je4sm32812877pbd.94 - gsmtp
>>> DATA
354  Go ahead je4sm32812877pbd.94 - gsmtp
>>> .
250 2.0.0 OK 1417930703 je4sm32812877pbd.94 - gsmtp
>>> QUIT
221 2.0.0 closing connection je4sm32812877pbd.94 - gsmtp

Odstraňování problémů

V případě, že e-maily nejsou správně doručovány, musíte zkontrolovat několik věcí. První věc, kterou je třeba zkontrolovat, je, že lokálně běží smtp server (mta). Příkaz netstat to může říct

$ sudo netstat -ltnp | grep 25
[sudo] password for enlightened:
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      2541/master
tcp6       0      0 :::25                   :::*                    LISTEN      2541/master

Pokud běží stmp server, jako je Postfix, a e-maily stále neodcházejí, zkuste například překonfigurovat Postfix. Na systémech Ubuntu/Debian to lze provést pomocí příkazu dpkg-reconfigure

$ sudo dpkg-reconfigure postfix

Pak to zkuste znovu, příkaz mail a mělo by to fungovat. Pokud stále ne, zkuste kontaktovat poskytovatele serveru.

Žádné e-maily z místních systémů

Pokud se pokusíte odeslat e-maily z místního počítače na adresu gmail, vaše e-maily budou s největší pravděpodobností odmítnuty, takže to nezkoušejte.

Je to proto, že běžné počítače připojené k internetové adrese mají ip adresu, která není spojena s žádnou platnou doménou jako takovou, a gmail takové přihlašovací údaje před schválením jakékoli pošty k procházení přísně ověřuje.

Poznámky a zdroje

Kromě mailx existují další nástroje jako Swaks a smtp-cli, které lze použít k odesílání e-mailů z příkazové řádky a podporují různé funkce, jako je zadávání smtp serverů a přidávání příloh a tak dále.

Příkaz mailx je však dostupný ve výchozích úložištích většiny běžných distribucí, takže jej lze snadno nainstalovat. Dále zachovává syntaxi velmi podobnou syntaxi příkazu mail, což z něj činí náhradu za starší příkaz mail.

Příkaz mailx je dokonce schopen číst e-maily ze vzdálených serverů IMAP, ale to je něco, co jsme v tomto příspěvku nechali stranou a promluvíme si později. Chcete-li se dozvědět více, podívejte se na manuálovou stránku pro příkaz mailx s "man mailx".


Linux
  1. Odešlete e-mail z linuxového terminálu nebo skriptu pomocí příkazu mail

  2. Jak odeslat e-mail HTML pomocí příkazu Linux „mail“?

  3. Odesílejte poštu z příkazového řádku s externím serverem smtp v systému Linux

  1. 15 Příklady pro zvládnutí historie příkazového řádku Linuxu

  2. odesílání pošty z linuxového terminálu v jednom řádku

  3. Jak mohu automaticky odeslat gpg šifrovanou poštu z příkazového řádku linuxu?

  1. 4 způsoby, jak odeslat e-mailovou přílohu z příkazového řádku systému Linux

  2. Prohledávejte torrenty z příkazového řádku v Linuxu

  3. Jak odesílat poštu přes externí server SMTP pomocí příkazu mailx v Linuxu?