1. 概要

このチュートリアルでは、Linuxでターミナルからメールを送信する方法を見ていきます。 まず、概要を説明したメールシステムについて説明します。 次に、電子メールをパブリックSMTPサーバーに中継することにより、端末から電子メールを送信する方法を学習します。 最後に、電子メールクライアントで添付ファイル付きの電子メールを送信する方法を説明します。

2. 電子メールシステムのアーキテクチャ

始める前に、電子メールシステムのアーキテクチャをよく理解することが不可欠です。 特に、インターネットを介した電子メールの送信を容易にするためにどのコンポーネントが連携して機能するかを理解しようとします。

一般的な電子メールシステムは、メールユーザーエージェント(MUA)、メール配信エージェント(MDA)、およびメールトランスポートエージェント(MTA)のコンポーネントで構成されています。

2.1. メールユーザーエージェント(MUA)

MUAはより一般的に電子メールクライアントとして知られています。 これは、電子メールシステムのユーザー向けの部分です。 通常、メールを作成したり読んだりするときは、MUAとやり取りします。 一般的に知られているMUAには、Outlook、Gmail、Linuxのmuttなどがあります。

2.2. メール配信エージェント(MDA)

MDAは、MTAからの電子メールを受け入れ、それを受信者のメールボックスに保存する役割を担うコンポーネントです。 IMAPまたはPOP3を使用してMUAと通信します。

2.3. メールトランスポートエージェント(MTA)

MTAは、電子メールのヘッダーを使用して電子メールの転送とルーティングを行うコンポーネントです。 SMTP内の他のコンポーネントと通信するため、SMTPサーバーとも呼ばれます。 電子メールシステムでのその役割には、次のものが含まれます(ただし、これらに限定されません)。

  • 他のMTAからのメールを受け入れる
  • さらにルーティングするために、電子メールを適切なMTAに転送する
  • メールをMDAに渡す

3.  msmtp

msmtp は、テキストの本文を電子メールとして他のSMTPサーバーに転送できるようにする単純なSMTPクライアントです。 このチュートリアルでは、独自のMTAサーバーを設定する代わりに、msmtp。でOutlookのMTAを使用して端末から電子メールを送信します。

3.1. msmtpをインストールしています

パッケージマネージャーツールを使用してmsmtpをインストールしましょう。

$ apt-get install msmtp

3.2. msmtpの構成

msmtp を構成するには、現在のユーザーのホームディレクトリにファイル.msmtprcを作成しましょう。

$ cat - <<EOF > ~/.msmtprc
# Default settings
defaults
auth    on
tls    on
tls_trust_file    /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
EOF

このコマンドは、現在のユーザーのホームディレクトリにファイル .msmtprc を作成し、グローバル設定として機能するいくつかのデフォルト設定を使用します。

まず、 defaults ディレクティブは、次の構成行を.msmtprcの他のアカウントに適用する必要があることを示します。 auth フィールドを設定することにより、SMTPサーバーでの認証を有効にしました。

次に、tlsonに設定し、 tls_trust_file を使用して証明書へのパスを指定することにより、msmtpのTLSを有効にします。 さらに、 logfile。フィールドを使用して、msmtpログファイルのパスを指定します。

最後に、 chmod を使用して、そのファイルのアクセス許可を600に設定します。

$ chmod 600 ~/.msmtprc

3.3. SMTPサーバーアカウントの追加

メールを送信する前に、。msmtprc構成ファイルでアカウントを構成する必要があります。 これらのアカウントは、メールの送信に使用するパブリックSMTPサービスです。 この記事では、例としてOutlookSMTPサービスの構成を示します。 同じ構成が他のSMTPサービスにも適用できます。

このデモンストレーションでは、次の資格情報を使用してOutlook.comに電子メールアカウントを登録したと仮定します。

.msmtprc にさらにいくつかの構成行を追加して、OutlookSMTPサービスを構成しましょう。 最終的に、。msmtprcファイルは次のようになります。

$ cat ~/.msmtprc
# Default settings
defaults
auth    on
tls    on
tls_trust_file    /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtsp.log
# outlook
account    outlook
host       smtp.office.365.com
port       587
from       [email protected]
user       [email protected]
password   baeldung-linux

default outlook

まず、 account は、特定のSMTPサーバー構成を識別するための名前を指定します。 次に、SMTPサーバーのホストポートを指定します。 パブリックSMTPサービスのホストとポートは、オンラインですばやく検索することで簡単に取得できます。

さらに、userおよびpasswordフィールドに資格情報を入力します。 フィールドuserとfromは同じ値であり、特定の電子メールサービスプロバイダーに登録した電子メールアドレスである必要があります。

最後に、msmtpを使用してメールを送信するたびに使用されるdefaultアカウントも指定しました。

Outlookが確認メールを送信し、アカウントがメールを送信する前にアカウント所有者に確認を要求することがあります。 Outlook.comからメールボックスに送信された指示に従うことで、アカウントを検証できます。

3.4. Linuxターミナルから簡単なメールを送信する

msmtpを使用してメールを送信してみましょう。

$ echo -e "\nSending regards from Terminal." | msmtp -a outlook [email protected]

上記のコマンドでは、電子メール本文の出力をmsmtpコマンドにパイプします。 次に、フラグ -a を使用して、outlookアカウントで送信することを指定します。 これは、。msmtprc構成ファイルで設定したアカウントです。 最後に、受信者の電子メールアドレスが最後の引数として指定されます。

また、メール本文の前に改行文字「\ n」を追加して、メール本文をヘッダーから分離しています。 その改行文字がないと、受信者の電子メールクライアントに電子メールの本文が表示されません。

Enterキーを押すと、OutlookSMTPサーバーから[email protected]に電子メールが送信されます。

3.5. メールに件名を追加

メールに件名を追加するには、メールの件名を指定します。

$ echo -e "Subject: Regards\n\Sending regards from Terminal." | msmtp -a outlook [email protected]

このコマンドでは、メールの件名ヘッダーを Subject:Regardsとして手動で追加しています。 次に、その後に2つの改行文字を追加して、件名ヘッダーを電子メール本文から分離します

3.6. HTMLメールの送信

HTMLメールを送信するには、 sample.html ファイルを作成し、入力をHTMLファイルとして解釈するヘッダーを含める必要があります。

Nanoエディターでsample.htmlファイルを作成しましょう。

$ nano sample.html

次に、このコンテンツを追加できます。

From: [email protected]
To: [email protected]
Subject: This is the Subject
Mime-Version: 1.0
Content-Type: text/html

<html>
  <head>This is Email Head</head>
  <body>
    <h2>This is the Main Title</h2>
    <p>This is the body text</p> 
  </body>
</html>

このsample.htmlファイルをHTMLメールとして送信しましょう。

$ cat sample.html | msmtp [email protected]

ここで、catコマンドはsample.htmlファイルの内容を出力し、その結果をmsmtpコマンドにパイプします。

Content-TypeMIMEヘッダーとして使用しているため、ファイルはHTMLファイルとして処理されます。 msmtpで処理するには、HTMLファイルでメールヘッダー情報を指定する必要があることに注意してください。

4. mutt

前のセクションでは、msmtpを使用してLinux端末から電子メールを送信する方法を説明しました。 単純な電子メールでは機能しますが、MUAを使用するとさらに多くのことができます。 たとえば、 msmtpのみを使用すると、メールと一緒に添付ファイルを送信することはできません。

コマンドラインツールとして使用できるLinuxのMUAであるmuttコマンドを見てみましょう。

4.1. muttをインストールしています

mutt をインストールするには、次のコマンドを実行するだけです。

$ apt-get install mutt

4.2. muttの構成

次に、以前に構成したmsmtpを使用して電子メールを送信するようにmuttを構成します。 現在のユーザーのホームディレクトリに構成ファイル.muttrcを作成するには、次のコマンドを実行します。

$ cat <<EOF > ~/.muttrc
set sendmail="/usr/bin/msmtp"
set use_from=yes
set [email protected]

まず、 set sendmail = / usr / bin / msmtp という行で、muttmsmtpコマンドを使用して電子メールを送信します。 次に、 use_from をtrueに設定し、from変数をメールアドレスに設定しました。 この値は、msmtpで構成したメールアドレスと同じである必要があります。 電子メールが異なる場合、サーバーはその電子メールの配信を拒否します。

4.3. 添付ファイル付きの電子メールの送信

ダミーの添付ファイルlog.txtを作成して、電子メールで添付ファイルを送信するプロセスを示しましょう。

$ echo "Some log event" > log.txt

log.txt を添付ファイルとして送信するには、muttコマンドを次のように実行します。

$ echo "This is the email body" | mutt -a "./log.txt" -s "Email Subject" -- [email protected]

まず、フラグ-aは添付ファイルのパスを指定します。 次に、フラグ -s を使用して、電子メールの件名を電子メールの件名として指定します。 最後に、受信者の電子メールアドレスを最後の引数として渡します。

-a フラグによって値が消費されないようにするには、受信者の電子メールアドレスの前に二重ダッシュ「–」を付ける必要があることに注意してください。

4.4. HTMLメールの送信

HTMLメールを送信するプロセスを示すためにダミーのHTMLファイルsample.htmlを作成してみましょう。

$ nano sample.html

次に、このコンテンツを貼り付けることができます。

<html>
  <head>This is Email Head</head>
    <body>
      <h2>This is the Main Title</h2>
      <p>This is the body text</p>
    </body>
</html>

次に、このsample.htmlファイルを使用してHTMLメールを送信しましょう。

$ mutt -e "set Content-Type: text/html" [email protected] -s "Email Subject" < sample.html

Content-Type をMIMEヘッダーとして使用して、muttに入力ファイルをHTMLドキュメントとして処理するように指示しています。

以前のバージョンではContent-Typeのサポートが利用できなかったため、muttバージョン1.5.x以降がインストールされていることを確認する必要があります。

5. 結論

このチュートリアルでは、基本的な電子メールシステムアーキテクチャについて簡単に説明しました。 次に、Outlookを例として使用して他のMTAに電子メールを送信できるシンプルなSMTPクライアントであるmsmtpを紹介しました。 最後に、さらに一歩進んで、電子メールクライアントmuttを使用して添付ファイル付きの電子メールを送信する方法を示しました。