smrshを使ってプログラムを動かすと正常に動作しない

このQ&Aのポイント
  • smrshを使用したプログラム実行時にメールの送信者と件名を取得できない問題が発生
  • /etc/smrshにリンクを作成してプログラムを実行すると正常に動作しない
  • 直接プログラムを実行するとメールヘッダーから送信者と件名を取得できるが、smrsh経由ではできない
回答を見る
  • ベストアンサー

smrshを使ってプログラムを動かすと正常に動作しない

現在メール受信したら、プログラムを実行するよう /etc/smrshにリンクを作成したところ、プログラムは実行されるのですが、 その中でメール送信時に送信者(From:)と件名(Subject:)を mailユーザのメールヘッダーから抜き出してメール送信の件名と From:に割り当てています。 (意味つたわってますでしょうか。。) それが、直接プログラムを実行すればしっかりとmailユーザに 届いたメールのヘッダーから 件名を抜き出し自身の件名とし、 送信者アドレスを抜き出し自身が送信者(From:)となり 指定したアドレスへメール送信する。ということが出来るのですが、 /etc/smrshを介した際には$SUBJECTと$ADDRESが代入されなくなってしまいます。 ---------------------------------------------------------- ADDRES=`cat /var/mail/mail |nkf -e|\ awk '/^From/'|cut -d'<' -f2 | tr -d ">"|head -1` SUB=`cat /var/mail/mail |nkf -e |\ awk '/^Subject/,/*/' |head -4|\ awk '!/^Date/&&!/^From/&&!/^X-/&&!/^Message-ID:/' |\ awk '{printf "%s",$0}'|\ sed -e 's/^Subject: //' -e 's/^ \+//'` case "$SUB" in *=?ISO-2022-JP?*|*=?iso-2022-jp?*) echo $SUB |nkf -mB |\ cut -d ':' -f2,3,4,5,6 |\ sed "s/^/Re:/" > ./iso.$$ ;; *) echo $SUB |nkf > ./no-iso.$$ esac SUBJECT=`cat ./iso.$$ ./no-iso.$$ 2>/dev/null` nkf <<ADMIN | mail -s "$SUBJECT" アドレス -- -f "$ADDRES" 本文 SUBJECT="$SUBJECT" ADDRES="$ADDRES" ADMIN ---------------------------------------------------------- メールログには以下の出力がありました。 Authentication-Warning: 自ホスト: mail set sender to <> using -f from=<>, と出力されておりました。 /etc/smrshを使ってプログラムを実行した場合は 代入が旨くいかないということがあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • pakuti
  • ベストアンサー率50% (317/631)
回答No.2

わかりにくくてすみません。 パスが通っていないのとtrusted userは別の話です。 該当のスクリプトを実行する際に、スクリプトの内部でパスが通っていない (nkfコマンドがどこに存在するかがわからない)ために空白になっているものと思われます。 nkf自体は恐らく /usr/local/bin/nkf に存在しているものと思われますので、スクリプトでフルパスでしていするか 環境変数に、/usr/local/bin/を追加する必要があります。 SUB=`cat /var/mail/mail |nkf -e |\ ↓ SUB=`cat /var/mail/mail |/usr/local/bin/nkf -e |\ または、スクリプトの最初で以下を定義 export PATH=$PATH:/usr/local/bin/

LINUX-man
質問者

お礼

回答ありがとうございます!! rootで実行できて。。。という点からroot以外のユーザで直接スクリプトを実行したら、パーミッションデナイトがいっぱいでてました。 なので、sudoを勉強して至る所にroot権限で実行させた結果うまく 定義することができましたっ ご協力ありがとうございます。 exportは勉強したことないので機会があったら調べてみたいと思いますっ

その他の回答 (1)

  • pakuti
  • ベストアンサー率50% (317/631)
回答No.1

エラーの内容を見ると $ADDRESが期待通りになっていないようです。 (空になっています) 恐らくはパスが通っていないのでは無いでしょうか? 怪しいのは、nkfじゃないかと思います。 ちなみにエラーは、メールアドレスの変更(-fオプション)を 実行しているユーザが、sendmailに信頼されていないための警告ですので メールが送信できなくなるわけではありません。 エラーが気になる場合には、trusted_usersに実行者のアカウントを追記して下さい。

LINUX-man
質問者

お礼

ありがとうございます。 /etc/mail/trusted-usersというファイルがあったのですが、 以下の2行だけでした。 # trusted-users - users that can send mail as others without a warning # apache, mailman, majordomo, uucp, are good candidates おそらく2行目に追記すればよいのかと下記のようにし # nkf, fhadmin, apache, mailman, majordomo, uucp, are good candidates などsendmailの再起動も試しましたが、結果は同じでした。 これはもともとコメントアウトされてるのかと思い、 シャープをはずしても同じでした。。 どうしたらよいのでしょうか

LINUX-man
質問者

補足

sendmail.cfとsubmit.cfファイルのそれぞれtrustedの所に Tmail を追記し、sendmailの再起動を行った結果、 Authentication-Warning:というエラーはなくなったのですが、 from=<>, という送信者がセットされない($ADDRESが空) 状況が変わりません。やはり直接実行すると$ADDRESは入り問題ないです。 メールログを見ると、mailユーザの時は$ADDRESの定義が出来ず、 rootユーザから送信した時は問題なかったです。 relay=mail@localhost relay=root@localhost メールは送信されるようになったので、mailユーザがトラステッドされた? のだと思うのですが、よく見ると$SUBJECTも定義できておらず、 本文の SUBJECT="$SUBJECT" ADDRES="$ADDRES" の部分も SUBJECT="" ADDRES="" となり代入されないままなのです。なんででしょうか。。

関連するQ&A

  • 文字化けしたときはnkf -mBにて日本語にしたい

    cat $HEADER |awk '/^Subject/'|nkf 上記コマンドにて日本語が表示される場合と =?ISO-2022-JP?という文字化けが起こる時があります。 なので、出来れば cat $HEADER |awk '/^Subject/'|nkf |if /=?ISO-2022-JP?/ ;then nkf -mB (笑) のようなコマンドで、文字化けが起きてる時だけnkf -mBコマンド を使うようなことはできないでしょうか 以下のようにcase文で試しましたがだめでした。 おそらくパターンにマッチする時の処理に 代入するということができないから失敗するのだと思います。 SUB=`cat $HEADER | awk '/^Subject/' case "$SUB" in =?ISO-2022-JP?*) $SUBJECT=`echo $SUB |nkf -mB` *) $SUBJECT=`echo $SUB |nkf` esac mail -s "$SUBJECT" アドレス

  • 件名が途中で切れる

    CentOS7でmailコマンドを実行すると件名が途中で切れてしまいます。 例えば以下のように件名を「あいうえおかきくけこさしすせそたちつてと」として実行すると、 cat honbun.txt | mail -s `echo "あいうえおかきくけこさしすせそたちつてと" | nkf -j | nkf -M` -r [送信者メールアドレス] [宛先メールアドレス] 件名が「あいうえおかきくけこさしすせそ」となってしまい、送信者メールアドレスや宛先メールアドレスにメールが届きます。件名を「かきくけこさしすせそたちつてとあいうえお」にすると件名が「かきくけこさしすせそたちつてと」になってしまいます。 件名を「あいうえおかきくけこさしすせそ」にして上記を実行すると件名は正常に「あいうえおかきくけこさしすせそ」となり、送信者が指定した送信者メールアドレスで指定した宛先メールアドレスにメールが届きます。 ちなみに「echo "あいうえおかきくけこさしすせそたちつてと" | nkf -j | nkf -M」を実行すると =?UTF-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44GZ44Gb44Gd?= =?UTF-8?B?44Gf44Gh44Gk44Gm44Go?= と表示されます。 mailコマンドではなくnkfコマンドの影響なのか、文字数に制限あるのかわかりませんが、件名が全部入るようにメール送信するにはどのようにすればよいかご教示ください。 よろしくお願い致します。 (honbun.txtファイル内にメール本文があります)

  • PHPでmb_send_mail()関数を使っときの件名について

    PHPでmb_send_mail()関数を使っときの件名について mb_send_mail()でメールの送信はできるのですが、件名(Subject)を日本語にすると8文字以上送信すると送信エラーが起こります。同じプログラムをLinuxでやるとうまくいきます。プログラムは以下のようにしています。(mail()関数を使うとこのような問題は起こりませんでした。) mb_language('Japanese'); $subject='メールテスト'; $subject=mb_convert_encoding($subject,'ISO-2022-JP','UTF-8'); $message='Webメールのテストです。'; $message=mb_convert_encoding($message,'ISO-2022-JP','UTF-8'); $head='私から送信されました。<****@****.net>'; $head=mb_convert_encoding($head, 'ISO-2022-JP', 'UTF-8'); $head=mb_encode_mimeHeader($head,'ISO-2022-JP','B'); if(mb_send_mail('****@****.com',$subject,$message,'From:'.$head)){ echo 'おくったよ。<br>'; } else{ echo 'おくれない。'; }  件名の全角での文字数を増やす方法があったら教えてください。  よろしくお願いいたします。 <システム環境>  Windows7(64Bit)  Apache2.2  PHP5.3.2

    • ベストアンサー
    • PHP
  • 自宅の公開サーバへのアクセス元IPの解析を以下のスクリプトで行おうと考

    自宅の公開サーバへのアクセス元IPの解析を以下のスクリプトで行おうと考えております。 これをcronで自動化したいのですが、cronで実行するとawk以下のコマンドの実行結果が空になり、本文に組み込まれません。日本語は正しく表示されています。 rootで実行した場合は、すべての結果が正しくメール送信されてきます。 Linux初心者なため、詳しい方からのアドバイスをお待ちしております。 以上、よろしくお願いいたします。 ~~~~~~スクリプト~~~~~~~~~ #!/bin/bash # 初期設定(環境変数、メール送信宛先、件名、コマンド) export LANG=ja_JP.UTF-8 address="hogehoge@hoge.com" subject="Webアクセス解析" LOG=./log/http_analyze.log cmd="cat $LOG" awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c | sort -r > $LOG 2>&1 # 件名の文字コードをJISに変換 #subject=`echo $subject | nkf -j` subject=`echo $subject` # メール送信(コマンド結果はSJISに変換) mail -s "$subject" $address << HONBUN アクセス回数/アクセス元IPアドレス `$cmd` HONBUN # 終了 exit ~~~~~~~~~~~~~~~~~~~~ ~~~~root実行結果メール本文~~~~ アクセス回数/アクセス元IPアドレス 34 192.168.0.XXX 12 84.XXX.181.XXX 8 201.XXX.235.XXX 6 187.XXX.19.XXX ~~~~~~~~~~~~~~~~~~~ ~~~~cron実行結果メール本文~~~~ アクセス回数/アクセス元IPアドレス ~~~~~~~~~~~~~~~~~~~ また、その他気になる点がありましたら、合わせてアドバイスいただければ幸いです。

  • mail関数で正常に届かない

    mailやmb_send_mailを使ってメールの送信を試していますが、きちんとfromとsubjectを設定してもメールの差出人アドレスの部分に「httpd」と記載されて、件名は空白になってしまいます。 いくつかサーバーを試してみましたが、きちんと動くサーバーとそうでないサーバーがあるようです。 何かご存知の情報がありましたら、よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPでフォームメール

    いつも適切なご回答誠にありがとうございます。PHP初心者で参考書やnetを頼りに制作している者です。現在フォームを作成していて確認メールでの質問です。送信者宛てには上手く送信されるのですが、管理者宛のメールの件名と送信者がうまく表示されません。どなたかお助けください。 //----------------ここから管理者宛にMAIL送信------------------------// $subject="資料請求がございました"; $subject=mb_convert_encoding("$subject","JIS","SJIS"); $subject=mb_encode_mimeheader($subject); $other = stripslashes($other); $from="${name01}"; $from=mb_convert_encoding("${from}","JIS","SJIS"); $from = base64_encode($from); $from = "=?ISO-2022-JP?B?" . $from . "?="; $from = "From: \"".$from. "\"" . "<" . "$e_mail" . ">"; $s_msg="以下の内容で資料請求がありました。資料発送の手配をお願いします。\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ■お名前:${name01} ■電話番号:${tel} ■E-メール:${e_mail} ■ご意見・ご要望:\n\n${other}\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ${d_site}|資料請求フォーム\n \n"; $s_msg = mb_convert_encoding($s_msg,"JIS","SJIS"); $sendto = "$d_recipient"; mb_send_mail($sendto,"$subject","$s_msg","$from"); //-------------------------------------------------------------------------------------//

    • ベストアンサー
    • PHP
  • メール送信で文字化け

    メール送信で件名が文字化けしてしまいます。 カテゴリ内には同様の質問もあるようですが、 解決できないので、投稿しました。 以下のようなコードです。 $to= "aa@aa.aa"; $from= "bb@bb.bb"; $subject= "メール送信テスト"; $headers= "From:$from"; $subject = i18n_mime_header_encode(i18n_convert($subject, "JIS")); $name= $_POST["name"]; $sub= $_POST["sub"]; $body= $_POST["body"]; $message="$name \n $sub \n $body \n"; if(mail($to, $subject, $message,$headers)){ echo "送信完了"; }else{ echo "送信エラー"; } ちなみに、 $subject= base64_encode($subject); とかもやってみたけど駄目でした。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • cronが実行されているのに動作しない

    phpファイルをcronで設定したのですが動作しません。 『cat /var/log/cron』にて確認をすると正常に実行されています。 実行はされているが、処理されないということになります。 何がだめなのでしょうか? cron設定 * * * * * /user/bin/php /var/www/public_html/test/mail/test.php test.php <?php require( '/var/www/private_html/test/data.php' ); $to_mail = "test@****.jp"; $m_title = "cronテスト"; $s_name = "メールテスト"; $return_mail = "test@****.jp"; mb_language( 'ja' ); mb_internal_encoding("utf-8") ; $subject = "$m_title"; $headers= "From:" .mb_encode_mimeheader( $s_name ) ."<" .$s_mail .">"; $return_path = '-f' . $return_mail; $body = "メール送信テスト\n\n"; mb_send_mail( $to_mail, $subject, $body, $headers, $return_path ); ?> 以上のphpファイルをcron設定しており、 URLを直接たたくとphpファイルは処理されることも 確認済みです。 cronからの実行だとなぜファイル処理がなされないのでしょうか? 原因がわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • nkf -mについて

    procmailの設定で :0 * ^Subject:.*iso-2022-jp * ^Subject:.*\/.* * ? echo "$MATCH" | nkf -meZ | sed 's/[[:space:]]//g' | egrep 'これは儲かる' /dev/null 「Subjectがiso-2022-jpで、”これは儲かる”という文字列を含む場合そのメールは/dev/nullに送る」という意味になるそうです。 その中にあるnkf -meZのうち、mのオプションの意味が、ネットで検索してもでてきません。これはどういうオプションなのでしょうか。 また、2つめのSubjectのところにある「/」なんですが、これは何のためにあるのでしょうか。

  • メール送信プログラムについて

    お世話になっております。 現在、メール送信プログラムを作成しております。 下記のプログラム内に、「BCC」の部分を追加したいと思いますが、 perseエラーが発生してどうにもうまくいきません。 どなたか、ご教授のほどよろしくお願いします。 $title2 = "=?iso-2022-jp?B?".base64_encode($title)."?="; $naiyou2 = "お名前:$name\n メールアドレスfrom:$from\n メールアドレスto:$to\n タイトル:$title\n 内容:$naiyou\n"; if ($name != "" and $from != "" and $title != "" and $naiyou != "" ) { if (mail($to, $title2, $naiyou2, "From:$from")) { echo "メールを送信しました"; } else { echo "メール送信失敗です"; } 下記の場合なら、問題なくBCCメールが送信されるのですが。。 <?php $headers = "Bcc: aiai@ueo.jp\r\n"; mail("okaoka@ueo.jp", "My Subject", "Line 1\nLine 2\nLine 3", "$headers"); ?>

    • ベストアンサー
    • PHP