postfixのメールキューを書き換える
注:最終的には諦めてますので有用な情報はそれほどありません
最近のメールサーバーは大体、senderにちゃんと正引きできるドメインが設定されていないと受信拒否されてしまいます。 こちらからメール送信する際、hostnameの設定をしないでメール送信をしてしまい、senderが「xxx@localhost.localdomain」という状態になってしまい、相手のメールサーバーに受取拒否され、「/var/spool/postfix/deferred」にたまっている状態となっておりました。
これをなんとか送信しようというお話。
postfixのメールキューの形式は完全に独自形式のようで、人間が読めるように変換して出力するpostcatというコマンドが用意されています。
$ mailq -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- F2180160222 549 Thu Nov 13 20:13:20 xxx@localhost.localdomain
まずこんな感じでキューIDを調べます この場合「F2180160222」ですね
postcat -q F2180160222 *** ENVELOPE RECORDS deferred/F/F2180160222 *** message_size: 549 179 1 0 549 message_arrival_time: Thu Nov 13 20:13:20 2014 create_time: Thu Nov 13 20:13:20 2014 named_attribute: rewrite_context=local sender_fullname: sender: xxx@localhost.localdomain *** MESSAGE CONTENTS deferred/F/F2180160222 *** Received: by localhost.localdomain (Postfix, from userid 501) id F2180160222; Thu, 13 Nov 2014 20:13:20 +0900 (JST) To: hogehoge@gmail.com Subject: test From: xxx@localhost.localdomain Date: Thu, 13 Nov 2014 20:13:20 +0900 Message-ID: <54649250690447cea26330707f000101@localhost> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit message *** HEADER EXTRACTED deferred/F/F2180160222 *** original_recipient: xxx@localhost.localdomain recipient: xxx@localhost.localdomain *** MESSAGE FILE END deferred/F/F2180160222 ***
こんな感じでキューのメールを読むことができます
送信できなかったものについてはsenderのlocalhost.localdomain部分を実在するドメインに無理やりsedで書き換えて送信しました。その場合、アドレス全体の文字数は変えてはいけないようです。フォーマットを解析しようとpostfixのソースもちょっと見たのですが、根が深そうだったので断念しました。