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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Postfix

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

221閲覧

存在するはずのPythonスクリプトがexecvpで"No such file or directory"となるのを解決したい

pacapacapaaan

総合スコア3

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Postfix

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2024/03/06 10:18

編集2024/03/06 10:20

実現したいこと

postfix にて メールを Python で加工して転送したい

前提

以下の記事を参考に、postfix にて メールを Python で加工して転送しようとしています。
タイトル:WSL に postfix を導入して Office365 宛のメールを中継して Python で加工する
URL:https://qiita.com/kerobot/items/0dda9cdeb3dd9569c815

環境が上記記事と異なっており、さくらのVPSにてUbuntu20.04を利用しています。

発生している問題・エラーメッセージ

上記のURL記載の手順に従って設定したところ、以下のエラーが発生します。

pipe[20926]: fatal: pipe_command: execvp /home/ubuntu/postfix/transfer_mail.py: No such file or directory

こちらのエラーを解消するため、アドバイスいただければと思っています。

試したこと

No such file or directoryとのことですが、ファイルは存在しています。
エラー文をコピペして
ls -l /home/ubuntu/postfix/transfer_mail.py と実行すると結果は、以下となります。
-rwxr-xr-x 1 ubuntu ubuntu 1244 Mar 6 18:55 /home/ubuntu/postfix/transfer_mail.py

また、VPSで別OSとしてalmalinuxで実施しても同じエラーが発生しました。

該当のソースコード

ソースコードとしては上記の記事からコピペして使っています。

Python

1#!/usr/bin/python3 2 3import sys 4import os 5import email 6import email.parser 7from os.path import join, dirname 8from subprocess import Popen, PIPE 9 10# 標準入力から取得 11mime_str = sys.stdin.read() 12# mime_str = open(sys.argv[4]).read() 13# Eメールとして解析 14message = email.parser.Parser().parsestr(mime_str) 15# メールの内容を吐き出すファイル 16filepath = join(dirname(__file__), 'result.txt') 17# メールの内容をファイルに吐き出す 18with open(filepath, mode='w') as f: 19 # パラメータ 20 for arg in sys.argv: 21 f.write(f"{arg}\n") 22 # メールヘッダ 23 for key in message.keys(): 24 value = message.get(key) 25 f.write(f"{key} : {value}\n") 26 # メール本文 27 payload = message.get_payload() 28 f.write(payload) 29# 送信元、送信先、件名を設定 30message["From"] = sys.argv[1] 31message["To"] = sys.argv[2] 32message["Subject"] = "Test mail !!!" 33# メールを転送 34command = ["/usr/sbin/sendmail", "-t", "-oi"] 35stdout = '' 36stderr = '' 37retval = 0 38process = Popen(command, stdin=PIPE) 39(stdout, stderr) = process.communicate(message.as_string().encode()) 40retval = process.wait() 41if retval == 0: 42 sys.exit(0) 43else: 44 sys.exit(1) 45

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

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

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

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

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

Eggpan

2024/03/06 11:54

/etc/postfix以下などにファイルを移したら結果が変わらないでしょうか? ホームディレクトリは自身かrootユーザしか参照できないパーミッションになっているので、postfix ユーザが見つけられていない可能性がありそうです。
ikedas

2024/03/06 12:23

サーバにログインして /home/ubuntu/postfix/transfer_mail.py を直接実行してみたらできますか。
ikedas

2024/03/06 12:27

あと、/home、/home/ubuntu、/home/ubuntu/postfix のパーミッションはどうなっていますか。
otn

2024/03/06 15:51

掲載のプログラムって、「お書きのエラーを発生しているプログラム」じゃなくて、「お書きのエラーが発生しているために起動されていないプログラム」ではないですか?起動されていないプログラムの中味を乗せても無意味ですね。このファイルを起動しようとしているPostfixの設定ファイルに間違いがあるのでしょう。 /home/ubuntu/postfix/transfer_mail.py もしくは途中ディレクトリに master.cfで指定したユーザーからのアクセス権が無い場合は、Permission denied のエラーになるので、No such file or directory のエラーになるということはそのファイルが存在しないと言うことです。 とりあえず、master.cf の該当行を載せましょう。
guest

回答1

0

自己解決

皆様アドバイスありがとうございました。
こちら解決いたしました。
pythonスクリプトを直接実行しようとしたところ、「/usr/bin/python3^M: bad interpreter」というエラーとなり、
Windowsからスクリプトを作成していたがために改行コード絡みでうまく動作していなかったようです。
スクリプト内の改行コードを置換することで想定通りの動作を得られました。

投稿2024/03/07 01:41

pacapacapaaan

総合スコア3

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

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

ikedas

2024/03/07 03:07

正確なエラーメッセージは bash: /home/ubuntu/postfix/transfer_mail.py: /usr/bin/python3^M: bad interpreter: No such file or directory といったものだったのではないかと思います。Postfixでexecvpから実行した場合は最終結果の「No such file or directory」だけが出力されたようですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問