Mutt、ssmtp、およびレポート

かつて私がまだHabréにいなかったとき、この記事はサンドボックスで公開されていました。 残念ながら、誰も彼女を好きではなく、時間が経つにつれて削除されました。 私は長い間、それをどうするかを考えていました-得点し、Habréに投稿するか、ブログのプログラマーのメモに投稿してください。 Habr向けに書かれているので、その上で公開することにしました。 だから、カットの下で-電子メールでレポートを送信する実践に関する記事。 さて、本文を読み直して、この記事は噴水ではないことを理解していますが、それは誰かにとっては役に立つでしょう。



多くの場合、このようなタスクは私の前に発生します。毎月(または毎週/毎日)そのようなログを処理し、それらに関するレポートを作成し、特定の電子メールに送信する必要があります。 この記事では、このようなタスクの2番目の部分、つまりレポートの送信についてお話したいと思います。 そのような日常的な操作のように思えますが、一見すると思われるよりも頻繁に問題が発生します。



私は毎回自分のスクリプトを書くよりも、既成の、実績のあるプログラムを使うことを好みます。 ほとんどの場合、適切なプログラムは誰かによって書かれたことがありますが、なぜ車輪を再発明するのですか?



muttを使用してレポートを送信します。 インターフェイスのシンプルさ、プログラムの古さ(読み取りの安定性)、そしてすべてではないにしても、ほとんどすべてのUnix系システムにmuttが移植されているという事実に惹かれます。 私のお気に入りのFreeBSDでは、/ usr / ports / mail / muttで探します。



muttを使用して添付ファイル付きのレターを送信するには、コマンドで十分です



mutt -s Subject -a File User@Host.com







Subjectはメッセージの件名、Fileは添付ファイルの名前、User @ Host.comはメッセージの受信者です。 電子メールに複数のファイルを添付するか、複数の受信者を指定できます。 プログラムは、標準入力から文字のテキストを読み取ります。



デフォルトでは、MuttはMTAとしてsendmailを使用します。 通常、これに問題はありません。muttをインストールすると、すぐにスクリプトの作成を開始でき、すべて正常に動作します。 しかし、私は、サーバーから直接手紙を送ることがファイアウォールの規則によって単に禁止されている状況に直面しなければなりませんでした。 この場合、サードパーティのSMTPサーバーを使用する必要があります。



問題は、MuttにはMTA機能がないということです。つまり、SMTPの操作はそのタスクではありません。 それでも、指定されたsmtpサーバーを介してメールを送信するように彼に教えることができ、ssmtpプログラムはこれを支援します。



厳密に言えば、ssmtpはMTAではなく、sendmailをエミュレートするsmtpクライアントです。 私のようにFreeBSDを使用している場合、ssmtpをポート(/ usr / ports / mail / ssmtp)からインストールできます。



ssmtpの構成は、ファイル/usr/local/etc/ssmtp/ssmtp.confを編集することによって行われます(OSでは、ファイルへのパスが異なる場合があります)。 これは次のようなものです。



root=reports@example.ru #

mailhub=smtp.example.ru:465 # smtp-

hostname=localhost # ,

UseTLS=Yes #

AuthUser=reports@example.ru #

AuthPass=qwerty #

FromLineOverride=Yes # From: mutt








Gmail経由でレポートを送信する場合、設定は少し異なります。



root=reports@gmail.com

mailhub=smtp.gmail.com:587

hostname=localhost

UseSTARTTLS=YES

AuthUser=reports@gmail.com

AuthPass=qwerty








ssmtpを使用してテストメールを送信しようとしています:



echo "" | ssmtp -v -s Hello admin@example.ru







手紙が正常に届いた場合、すべてが正しく行われました。 ssmtpに次のようなメッセージが表示される場合:



. . .

[->] MAIL FROM:<root@localhost>

[<-] 573 root@localhost failed to route the address

ssmtp: 573 root@localhost failed to route the address








また、問題ではなく、ssmtpが間違った送信者アドレスを示しただけで、smtpサーバーはこれに気付きました。 muttを介してメールを送信すると、すべてが正しく設定されます。



muttがレポートを送信するユーザーのホームディレクトリにあるssmtpを介してメールを送信するには、.muttrcファイルを修正する必要があります。



set sendmail="/usr/local/sbin/ssmtp" # ssmtp

set realname="Example Report System" #

set from="reports@example.ru" # e-mail








mutt操作を確認します。



echo "" | mutt -s Hello admin@example.ru







手紙は正常に受信者に届く必要があります。 クラウンによって実行されるスクリプトでmuttを使用する場合、muttは/ usr / local / binディレクトリにあり、デフォルトではcrontabのPATH環境変数に登録されていないことに注意する必要があります。 2つの解決策-crontabでPATH環境変数を修正するか、スクリプトでフルネームmuttを使用します。



また、レポートを送信する必要のあるサーバーには、ルート権限がありません。 この場合、管理者にmuttをインストールして構成するように説得するか、独自のメール送信スクリプトを作成する必要があります。 しかし、これはまったく異なる話です。



All Articles