RaspberryPiからrootとしてmutt経由でEメールを送信する

RaspberryPiからrootとしてmutt経由でEメールを送信する

Raspberry Piのハードウェアにアクセスするには、rootとして実行する必要があるアプリケーションがあります。このアプリケーションでは、データを含む添付ファイルを含む電子メールを送信する必要があります。

muttを使用して電子メールを正常に送信するbashスクリプトを作成できました。 C ++コードを使用したクイックテストでこのスクリプトを呼び出すことができ、正常に実行されました。

しかし、より大きなプロジェクトに統合すると、強制的にrootとして実行する必要があり、転送に失敗しました。その後、sudoを使用してスクリプトを単独で実行すると失敗することがわかりました。

root ユーザーの構成が欠落しており、一般的に使用される構成が sudo で使用されていないとします。ユーザー設定に関して、piはデフォルト設定です。構成の詳細を使用して編集した「muttrc」ファイルを/etc/、/etc/Mutt、/etc/mutt、および/etc/.muttに配置しようとしましたが、これらのいずれも機能しませんでした。

編集する:

メールスクリプトです

    #!/bin/bash  
    DATAFILE=$1  
    RECIPIENT=$2  
    echo "Sending email with data..."  
    echo "Recipient: " $RECIPIENT  
    echo "Attached file: " $DATAFILE  
    echo "" | mutt -s "Update" -i /home/pi/msgbody.txt $RECIPIENT -a $DATAFILE

このスクリプトは、引数が指定されてsudoなしで端末から直接呼び出されると、期待どおりに実行されます。 sudoを使用すると動作しません。私はCコードではなく、muttの設定が問題の根本的な原因であると思う傾向があります。

これはls -l権限の出力です(有用かどうかわからない)。

-rwxr-xr-x  1 pi   pi    222 Mar 19 21:51 emailscript

基本ユーザーは pi だと思います

C ++コード(sudoなしで実行):

void sendFile()
{
    string command = "/home/pi/emailscript " + lastFile + " " + emailAddress;
    system(command.c_str());
}

int main()
{

    cout << "Testing file sending function" << endl;
    sendFile();

    return 0;

}

ここで、ファイル名と電子メールアドレスは上記のグローバル変数で初期化されます。これはsudoなしで実行すると機能しますが、sudoで実行すると停止します。

ls -l このコードの出力:

-rwxr-xr-x 1 pi pi 68540 Mar 19 22:49 emailTestCode

私が知る限り、主なプロジェクトはプロセスです。約400行のコードで、複数のライブラリを使用します。メインプロジェクトの権限は上記のテストコードとまったく同じです。

編集2:(Cの代わりにC ++)

C ++コードをrootとして実行すると、stdの期待されるエコー出力が生成されます(ただし私のEメールアドレスとファイル名なので、ここには含まれません(ファイルへの絶対パスを提供します))。

標準エラー:

/home/pi/emailscript: line 8:  1911 Done                    echo ""
      1912 Alarm clock             | mutt -s "Update" -i /home/pi/msgbody.txt $RECIPIENT -a $DATAFILE

ベストアンサー1

私はこの問題を解決するいくつかの提案を受けましたが、一部の人はこれを回避策として考えることができます。

スクリプトがユーザーPiとして実行されるようにコマンドを編集しました。

void sendFile()
{
    string command = "su pi -c \"/home/pi/emailscript " + lastFile + " " + emailAddress + "\"";
    system(command.c_str());
}

「正しい」解決策は/ rootにmutt設定を含めることですが、私には効果がないようです。

おすすめ記事