コマンドラインからメールを送信する
mailコマンドは、さまざまなサービスやその他のWebアプリケーションが電子メールを生成および送信できるようにするために、すべてのLinuxサーバーで使用できる必要がある必須のコマンドです。
mailコマンドに関する以前の投稿で、mailコマンドを使用してLinuxサーバーのコマンドラインから電子メールを送信する方法を説明しました。
このチュートリアルでは、メールコマンドの拡張バージョンを使用します。これはmailx(またはインストール時に単にメール)と呼ばれ、gnumailutilsパッケージの古いメールコマンドよりも多くのことを実行できます。
どのように機能しますか
mail / mailxコマンドでは、電子メールを配信するためにローカルのSMTPサーバー(MTA)が実行されている必要があります。メールでたどるルートはこんな感じです-
メール->sendmail->ローカルMTA->受信者MTA[受信トレイ]
たとえば、受信者がgmail.comの誰かである場合、受信者のMTAはgmailのSMTPサーバーになります。ローカルMTAの場合、PostfixのようなSMTPサーバーをインストールする必要があります。ほとんどの場合、最小限の構成でPostfixの基本的なインストールが機能します。
mailxコマンドをインストールします
Ubuntu / Debianベースのシステムでは、mailxコマンドは2つの異なるパッケージから利用できます-
1. heirloom-mailx
2。 bsd-mailx
より多くの機能とオプションがあるため、heirloom-mailxパッケージを使用します。
CentOS / Fedoraベースのシステムでは、heirloomパッケージである「mailx」という名前のパッケージは1つだけです。
システムにインストールされているmailxパッケージを確認するには、「man mailx」の出力を確認し、最後までスクロールすると、役立つ情報が表示されます。
#ubuntu / debian $ sudo apt-get install heirloom-mailx#fedora / centos $ sudo yum install mailx
mailxコマンドの使用
インストールすると、mailxコマンドをmailという名前で直接参照できるため、コマンドラインに入力するだけです。
1。簡単なメール
次のコマンドを実行すると、mailxは電子メールのメッセージが入力されるのを待ちます。 Enterキーを押すと、新しい行が表示されます。メッセージの入力が完了したら、Ctrl + Dを押すと、mailxにEOTが表示されます。
その後、mailxは自動的にメールを宛先に配信します。
$ mail-s"これは件名です"[email protected]こんにちは誰かお元気ですか私は元気ですByeEOT
2。ファイルからメッセージを取得する
メールのメッセージ本文はファイルからも取得できます。
$ mail -s "This is Subject" [email protected]メッセージは、echoコマンドを使用してパイプすることもできます-
$echo"これはメッセージ本文です"| mail -s "This is Subject" [email protected]3。複数の受信者
複数の受信者にメールを送信するには、すべてのメールをカンマで区切って指定します
$echo"これはメッセージ本文です"| mail -s "This is Subject" example @ unixlinux.online、example @ unixlinux.online4。 CCとBCC
「-c」および「-b」オプションを使用して、CCアドレスとBCCアドレスをそれぞれ追加できます。
$echo"これはメッセージ本文です"| mail -s "This is Subject" -c [email protected] [email protected]5。差出人の名前と住所を指定
「FROM」の名前とアドレスを指定するには、「-r」オプションを使用します。名前の後には、「<>」で囲まれたアドレスを続ける必要があります。
$echo"これはメッセージ本文です"| mail -s "This is Subject" -r "Harry" [email protected] 6。 「返信先」アドレスを指定
アドレスへの返信は、「-S」オプションを使用して内部オプション変数「replyto」で設定されます。
#replyto email $echo"これはメッセージです"| mail -s "Testing replyto" -S replyto ="[email protected]" [email protected]#replyto email with name $ echo "This is message" | mail -s "Testing replyto" -S replyto ="Mark" [email protected] 7。添付ファイル
添付ファイルは「-a」オプションで追加できます。
$echo"これはメッセージ本文です"| mail -s "This is Subject" -r "Harry" -a /path/to/file [email protected] 8。外部SMTPサーバーを使用する
これは排他的な機能であり、bsd mailxではなく、heirloom mailxでのみ取得できます。また、gnumailutilsのmailコマンドやmuttコマンドでも使用できます。
mailxコマンドは、外部のSMTPサーバーを使用して、メッセージを転送するために使用できます。構文は少し長いですが、理にかなっています。
$ echo "これはメッセージ本文であり、メッセージが含まれています" | mailx -v -r "[email protected]"-s"これは件名です"-Ssmtp ="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]これが内訳です
$ echo "これはメッセージ本文であり、メッセージが含まれています" | mailx -v \> -r "[email protected]" \>-s"これは件名です"\>-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 \> example @ unixlinux.onlineGmail SMTPサーバーを使用して、Gmailアカウントを介してメールを送信できます。それはとてもクールです!
特にGmailの場合、そのようなメールを送信する前に、安全性の低いアプリの設定を有効にする必要があります。9。冗長-SMTP通信を監視する
外部のSMTPサーバーを使用する場合、バックグラウンドで実行されるSMTP通信全体を監視することを選択できます。これは、SMTPサーバーをテストまたはデバッグするときに特に役立ちます。
$ echo "これはメッセージ本文であり、heirloommailxからのメッセージが含まれています"| mailx -v-s"これは件名です"-Ssmtp ="smtp.gmail.com:587" -S smtp-use-starttls -S smtp-auth =login -S smtp-auth-user ="example @ unixlinux .online "-S smtp-auth-password =" mypassword "-S ssl-verify =ignore [email protected]。 。 。 74.125.68.109:587に接続しています。 。 。 connected.220 mx.google.com ESMTP je4sm32812877pbd.94 --gsmtp> >> EHLO enlightened250-mx.google.com at your service、[122.163.43.21] 250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8>>> STARTTLS2202.0.0TLSを開始する準備ができました>>>EHLOenlightened250-mx.google.com at your service、[122.163.43.21] 250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER250-ENHANCEDSTATUSCODES250-PIPELINING250 -CHUNKING250 SMTPUTF8>>> AUTH LOGIN334 VXNlcmU6>>> YmnbWFpbC5jb20 =334 UGFzcmQ6>>> KnJgzKg ==235 2.7.0 Accepted>>> MAIL FROM:250 2.1.0 OK je4sm32812877pbd.94 --gsmtp> >> RCPT TO: 250 2.1.5 OK je4sm32812877pbd.94 --gsmtp> >>DATA354先に進みますje4sm32812877pbd.94--gsmtp> >> .250 2.0.0 OK 1417930703 je4sm32812877pbd.94 --gsmtp> >>QUIT2212.0.0接続を閉じるje4sm32812877pbd.94--gsmtp トラブルシューティング
メールが適切に配信されない場合は、いくつかのことを確認する必要があります。最初に確認することは、SMTPサーバー(mta)がローカルで実行されていることです。 netstatコマンドはそれを伝えることができます
$ sudo netstat -ltnp | grep 25 [sudo] enlightened:tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2541 / mastertcp6 0 0 :::25 :::* LISTEN 2541 / masterのパスワードPostfixのようなstmpサーバーが実行されていてもメールが送信されない場合は、たとえばPostfixを再構成してみてください。 Ubuntu / Debianシステムでは、これはdpkg-reconfigureコマンドで実行できます
$ sudo dpkg-reconfigure postfix次に、mailコマンドを再試行すると、機能するはずです。それでも解決しない場合は、サーバープロバイダーに連絡してみてください。
ローカルシステムからのメールはありません
ローカルコンピュータからGmailアドレスにメールを送信しようとすると、メールが拒否される可能性が高いため、送信しないでください。
これは、インターネットアドレスに接続されている通常のコンピュータには、有効なドメインに関連付けられていないIPアドレスがあり、Gmailは、メールの通過を承認する前に、そのような資格情報を厳密に確認するためです。
メモとリソース
mailxとは別に、コマンドラインからメールを送信するために使用できるSwakやsmtp-cliなどの他のツールがあり、smtpサーバーの指定や添付ファイルの追加などのさまざまな機能をサポートします。
ただし、mailxコマンドは、ほとんどの一般的なディストリビューションのデフォルトリポジトリで使用できるため、簡単にインストールできます。さらに、mailコマンドの構文と非常によく似た構文を維持しているため、古いmailコマンドの代わりになります。
mailxコマンドは、リモートIMAPサーバーからのメールを読み取ることもできますが、これはこの投稿から除外し、後で説明します。詳細については、「manmailx」を使用してmailxコマンドのマニュアルページを確認してください。
Linux