Twidge を試してみたが…

Twitter クライアントの一つである Twidge を試してみた.
Haskell で書かれており,コマンドラインから TwitterAPI を叩くのに便利なように作られている.


-m (--mailto) オプションで結果をメールで送信する機能があるのだけど,これが俺の環境ではうまく動いてくれない.
sendmail の設定は Mac OS X で Postfix(sendmail) を使って CLI でメールを送る - EAGLE 雑記 に書いた通りにしてある.

twidge lsreplies -lsum foo@example.com

とすると,Commands/Ls.hs の mailto 関数のところで止まってしまう.
この状態で C-c で殺すと

sendmail: fatal: No recipient addresses found in message header

という sendmail のエラーメッセージが表示される.原因がわからない.


ちなみに,このようなコードはうまく動く.

import HSH

main = runIO $ ("cat", ["foo.mail"]) -|- ("/usr/sbin/sendmail", ["-t"])


mailto のソースは以下のようになっている.runIO, echo, (-|-) は HSH モジュールの関数.

mailto section cp args m recipient =
    runIO $ echo (message ++ "\n") -|- (sendmail, ["-t"])
    where sendmail = (forceEither $ get cp section "sendmail")::String
          msgid = genMsgId section m cp
          subject = take 30 (sText m) ++ "... (twidge " ++ section ++ ")" 
          message = unlines $ 
                    (case get cp section "mailfrom" of
                      Left _ -> ["Subject: " ++ (sSender m) ++ ": " ++ subject]
                      Right x -> ["From: " ++ (sSender m) ++ " <" ++ x ++ ">",
                                  "Subject: " ++ subject]
                    ) ++  
                    ["Message-ID: " ++ msgid,
                     "X-Twidge-urlbase: " ++ forceEither (get cp "DEFAULT" "urlbase"),
                     "X-Twidge-server-base: " ++ serverHost cp, 
                     "X-Twidge-command: " ++ section,
                     "X-Twidge-update-id: " ++ sId m,
                     "X-Twidge-update-sender: " ++ sSender m,
                     "X-Twidge-update-recipient: " ++ sRecipient m,
                     "To: " ++ recipient,
                     "", 
                     sText m,
                     "", 
                     "(from " ++ sSender m ++ ")" 
                    ,"" 
                    ,"Tweet URL: http://twitter.com/" ++ sSender m ++
                     "/status/" ++ sId m
                    ,"Reply URL: http://twitter.com/home?status=@" ++
                     escapeURIString isUnreserved (sSender m ++ " ") ++
                     "&in_reply_to_status_id=" ++ sId m ++ "&in_reply_to=" ++
                     escapeURIString isUnreserved (sSender m)
                    ,"User home: http://twitter.com/" ++ sSender m
                    ]