mailx は正常に実行されましたが、メールは送信されませんでした。

mailx は正常に実行されましたが、メールは送信されませんでした。

私はmailxとsendmail機能を使用してグループからメールを送信しています。ソラリスさまざまなバージョンのマシン。そして、スクリプトは電子メールを送信するほとんどのコンピュータで動作します。少数のサーバーにメールを送信しても問題があります。ただし、このスクリプトを実行するとエラーは表示されません。

スクリプト1:

uuencode report.html report.html | mailx -s "mail subject" [email protected]

スクリプト2:

SELFDIR=`pwd`
DOCROOT=$SELFDIR"/"
MAIL_FROM="[email protected]"
MAIL_TO="[email protected]"

echo "From: "$MAIL_FROM > $DOCROOT"header.txt"
echo "To: "$MAIL_TO >> $DOCROOT"header.txt"
echo "Subject:  The mail subject  " >> $DOCROOT"header.txt"
echo "Content-Type: text/html" >> $DOCROOT"header.txt"

cat $DOCROOT"header.txt" $DOCROOT"report.html" | /usr/lib/sendmail -t

簡単に言えば、電子メールの送信に失敗したエラーやログを見つけて失敗の原因を特定する方法はありますか?

答え1

Solarisで最後に使用してからかなりの時間が経過しましたが、フラグを見れば何が起こっているのかを示していると確信していsendmailます。-v

(
    echo 'From: [email protected]'
    echo 'To: [email protected]'
    echo 'Subject: from me to you'
    echo
    finger
) | sendmail -t -v

mailxまた、このフラグが渡されたと確信しています。

echo hello, world | mailx -v -s "mail subject" [email protected]

/var/log/syslogメッセージを確認してくださいsendmail。また読んでくださいSolaris sendmail Ultimate トラブルシューティングガイドこれは、Solarisバージョン8、9、10の違いを解決するのに役立ちます。

答え2

これは少し改善されたスクリプトバージョンです。リテラル文字列(送信アドレスと宛先文字列)の周囲にバックティックの代わりに一重引用符を使用し$(pwd)、変数の補間が必要な場合は二重引用符を使用し、ヘッダーに複数行の代わりにheredocを使用しますecho__EOF__ここでは、文書の本文に文字列が表示される可能性が低いため、ここでは文字列を使用して文書を区切るのが好きです。任意の文字列を使用できます。

文書の末尾を区切る前に、最後の空白行を確認してください。空行は次のとおりです。必須メールヘッダーと本文のテキストを分離します。

ただし、変数は二重引用符で囲まれた文字列と同じ方法でここに挿入されます。コマンド置換を使用することもできます$(...)

#! /bin/sh

DOCROOT=$(pwd)
$header="$DOCROOT/header.txt"
$body="$DOCROOT/report.html"

MAIL_FROM='[email protected]'
MAIL_TO='[email protected]'
$subject='The mail subject'

cat <<__EOF__ > "$header"
From: $MAIL_FROM
To: $MAIL_TO
Subject: $subject
Content-Type: text/html

__EOF__

cat "$header" "$body" | /usr/lib/sendmail -t

問題が解決したら教えてください。

ただし、実際の質問に答えるには、sendmailシステムが施設のメールが送信される場所ごとに記録する必要があります。たぶん/var/log/mail.log似ているかもしれませんのでgrep mail /etc/syslog.conf確認してください。

関連情報