私はローカルFreeBSDコンピュータでSSTMPを使用して、いくつかのcronタスクなどの出力を同じコンピュータ(またはドメイン)でホストされていない「実際の」デフォルトの電子メールアカウントに送信しました。たとえば、次のように毎日のクローン操作を設定しました。
smartctl -a /dev/ada0 | grep overall-health | mail -s "Silicon daily smartctl" [email protected]
メッセージが私の「本物の」Eメールアカウントに正常に送信される限り、これはうまく機能します。ただし、電子メールを送信するたびに、「実際の」電子メールアカウントのメールシステムから多数の警告とバウンスメールを受信することもあります。
私は私のSSMTPと私の「本物の」Eメールアカウントホスト間の会話を示すmail
「冗長な」フラグがあることを発見しました。-v
私はそれを試してみて、次の興味深い部分を見つけました。
[->] RCPT TO:<[email protected]>
[<-] 250 Accepted
[->] RCPT TO:</usr/local/sbin/[email protected]>
[<-] 250 Accepted
[->] RCPT TO:<[email protected]>
[<-] 250 Accepted
[->] RCPT TO:</usr/local/sbin/[email protected]>
[<-] 250 Accepted
[->] RCPT TO:<[email protected]>
[<-] 250 Accepted
それでは、SSMTPはメッセージが意図した受信者にのみ送信されるのではなく、他の3つのアドレスにも送信されるべきであると言いますか?そのうちの1つが特に奇妙に見えます("/usr/local/sbin/[Eメール保護]」)そして何らかの理由で人々は二つRCPT TOライン。
これらの「追加」RCPT TOラインがどこから来るのかわかりません。誰でもどんなアイデアがありますか?ありがとうございます。
私の/usr/local/etc/ssmtp/ssmtp.confの内容:
[email protected]
mailhub=mail.vesterman.com:465
rewriteDomain=vesterman.com
hostname=silicon.vestertopia.net
FromLineOverride=YES
UseTLS=YES
[email protected]
AuthPass=hunter2
答え1
私はそれを見つけて修正しました。
私はssmtp
どのような状況で何かにRCPT TO行を追加するかどうかを調べるためにソースコードを見ました。その後、ssmtp
呼び出し時にどのコマンドライン引数が使用されたかを調べようとしました。私はその呼び出しがやや奇妙に見えるコマンドライン引数mail
で行われたことを発見しました。これは「追加」RCPT TO行に対応しているようです。ssmtp
# ps -jdp 63097 -ww 999
USER PID PPID PGID SID JOBC STAT TT TIME COMMAND
root 63097 62987 63097 60346 1 I 1 0:00.09 -su (bash)
root 36939 63097 36939 60346 1 S+ 1 0:00.00 - mail -vs aojg [email protected]
root 38014 36939 36939 60346 1 S+ 1 0:00.01 `-- sendmail send-mail /usr/local/sbin/ssmtp mailq /usr/local/sbin/ssmtp -i -v [email protected] (ssmtp)
/etc/mail/mailer.conf
私はこのファイルが「追加」RCPT TO行と重複していたため、しばらく懐疑的でした。次のようになります。
sendmail /usr/local/sbin/ssmtp
send-mail /usr/local/sbin/ssmtp
mailq /usr/local/sbin/ssmtp
newaliases /usr/local/sbin/ssmtp
hoststat /usr/bin/true
purgestat /usr/bin/true
…しかし、私が「〜のように見える」と言うときは、文字通り驚くほど意志を内包しています。私がcat
このようなことやそのようなことをするときの姿はこんな感じですnvim
。ところで、mail
最初の行の最初の「sendmail」に加えて、最初の3行を通過したという事実が私をもっと詳しく見ました。
たが、それが判明したが、そうだ6つの別々の線のように、実際には4本の線です。最初の3つの疑似行はEOLで区切られません。代わりにスペースで区切られます(したがって実際には1行です)。nvim
これが別の行であるかのように表示されるのか、単に偶然の一致であるのかはわかりません(スペースの数は「完璧な」改行をもたらす数とまったく同じです)。
だから私は.itmail
を呼び出したいと思います。 .itで行をsendmail
見つけます。その後、その行のすべてのエントリ(最初の「sendmail」自体を除く)を呼び出す必要がある呼び出しだと思います。こうしたはずだったが、空間の奇妙さによってこうなってしまった。sendmail
mailer.conf
sendmail
/usr/local/sbin/ssmtp
/usr/local/sbin/ssmtp send-mail /usr/local/sbin/ssmtp mailq /usr/local/sbin/ssmtp
つまり、実行可能ファイルは、コマンドライン引数(法的理由で追加された追加の引数を含む)を使用してmail
呼び出されます。/usr/local/sbin/ssmtp
send-mail /usr/local/sbin/ssmtp mailq /usr/local/sbin/ssmtp
最後に、sendmail
4つの開始パラメータのそれぞれが送信される電子メールアドレスであることを決定し、何らかの理由で各アドレスに「@vesterman.com」を追加します。
mailer.conf
そもそもファイルがなぜこのような状態なのかについては、おそらく悲劇的なコピーペースト事故が発生しただろうと信じます。