質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

Q&A

解決済

2回答

1589閲覧

postfixの|commandの引数の取得方法が知りたい

shirai

総合スコア1290

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

0グッド

0クリップ

投稿2021/10/18 03:36

前提・実現したいこと

https://teratail.com/questions/364567
これの続きです。

https://qiita.com/yukijiK/items/6ab75a8d3a33bf668412
TaichiYanagiyaさんに教えていただいて、ググってこのQiita記事を見つけました。

このQiitaの例「mail_get: |"/usr/bin/bash /tmp/sample.sh"」をmain.cfに記述すると、
「mail_get@設定したドメイン」にメールが送信される時には、メールを送らずに「/usr/bin/bash /tmp/sample.sh」を叩く
と解釈しました。

質問事項

このQiitaの下の方にはsample.shの中身が書かれているのですが、
その中でread lineコマンドが使われております。
前後の実行結果から察するに送られるであろうメールの中身が読み込まれているものと思われます。

純粋なシェルコマンドのread lineの使い方をググったところ、読み込むファイルを何らかの形で指定しているように見えますが、
このQiitaではその指定らしきものが見当たりません。
postfixの機能で暗黙的に指定されているのだと思いますが、main.cfでこれを取得する方法はあるでしょうか。

この後やりたいこと

管理コストの都合上、ここの場所に余計なファイル(今回の例で言うとsample.sh)を作りたくありません。
そこでシェルの記述(今回の例で言うと/usr/bin/bash /tmp/sample.sh)で済ませられないかと思っています。

具体的にはcurlでgetリクエストを送り、その送った先で内容を解釈(文字列操作のイメージ)をしたいと思っています。

shell

1postmaster: "/usr/bin/bash piyo=`echo -n ○○○ | base64` && curl \"http://127.0.0.1/hoge?fuga=$piyo\""

といった記述をmain.cfに加えたいです。
で、○○○には肝心のファイルの中身を入れようとしています。


管理コストの都合上、ここの場所に余計なファイル(今回の例で言うとsample.sh)を作りたくありません。

railsが動いていて、ここにバウンスメールの内容を使ったシステムを開発予定なので、そこにこのAPIを潜り込ませようと思っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

メール全体を別サーバー上のプログラムに渡すのであれば、

postmaster: "|curl -s -o /dev/null -X POST --data @- https://example.com/foo"

curlPOSTするのでしょうね。
fooでは標準入力を読むとメール全体が得られます。

/etc/aliasesに書いて、newaliasコマンドで反映します。

投稿2021/10/20 03:55

otn

総合スコア84804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shirai

2021/10/20 04:00

ありがとうございます! これで試してみます。
guest

0

すみません、この記事の下の方見てみると標準入力で受け取っていると書かれていました。。。
main.cfに書くのは以下の形で解決できそうです。

text

1postmaster: "|/usr/bin/bash read piyo && hoge=`echo $piyo | base64` && curl 'http://${DOMAIN}/foo?fuga=${hoge}'"

システム側でfooコントローラーを作り、適当なメソッドを上記curlのAPIとして割り当てて、
その中でbase64デコードをして、必要な情報を文字列操作して抜き取って、SQLにinsertします。

投稿2021/10/18 06:06

編集2021/10/18 06:07
shirai

総合スコア1290

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2021/10/18 18:38

/usr/bin/bash read piyo は、 「カレントディレクトリにあるreadという名前のファイルをbashスクリプトとして見なして実行する。引数がpiyo」という意味なので、意図通りでは無いでしょう。 が、そもそもが間違えているので、どちらにせよ駄目です。
shirai

2021/10/20 02:40

ありがとうございますm(_ _)m 「そもそもが間違えている」というのは「/usr/bin/bash read piyo」だけ修正すればいいという認識で正しいでしょうか。
otn

2021/10/20 03:21

いいえ。「そもそもが間違えている」というのは「/usr/bin/bash read piyo」だけ修正しても駄目だという意味です。main.cfに書くというのが間違っています。 また、メールヘッダの1行目だけ読んでそれをプログラムに渡して保存することに意味があると思えませんが、なぜ1行目だけなんでしょうか??
shirai

2021/10/20 03:33

> なぜ1行目だけなんでしょうか?? なるほど、これで全ての行が取れると思っていました。 (先方からGOサインが出てないのでまだ実装は試していないところでした。) > main.cfに書くというのが間違っています。 あれ、そうなんですね。 ここに書けばそこ宛のメールが送られない代わりにこのshellコマンドが実行されるという理解だったんですが、 そもそもそこが間違っているでしょうか。ご教授いただきたいです。
otn

2021/10/20 03:38

> そもそもそこが間違っているでしょうか。ご教授いただきたいです。 ですが、 > ググってこのQiita記事を見つけました。 と書いていますが、実際には記事をちゃんと読んでませんね。読みましょう。 > なるほど、これで全ての行が取れると思っていました。 read は1行読むコマンドです。
shirai

2021/10/20 03:54

ありがとうございます。 理解しました。これは/etc/aliacesに記載する必要があるんですね。 別記事を読んでいた影響でsendmailでしか使わないファイルだと思っていました。 readについても理解しました。 全部取得できるようなものを別途探してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問