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".