たけまるの日記

たけまるの日記です。web関係の技術ネタが多いですが、好きなことを適当に書いています。

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のソースもちょっと見たのですが、根が深そうだったので断念しました。