解決に至った回答には100ポイント差し上げます。

サーバーはさくらインターネットを利用しています。
このサーバーの配信プログラムはmaildrop を使用しています。

Q.
本文に特定の文字が入ったメールだけ転送する設定のやり方を教えてください。
.mailfilterに数行、記述をおこなうだけで出来る安易な方法だと思うのですが、記述の仕方がわかりません。

何度かここで質問しましたが解決に至っていません。

参考URLだけの回答は要りません。
.mailfilterに記述するソースをそのまま書いてください。
よろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/11/10 03:40:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:startkit No.1

回答回数166ベストアンサー獲得回数1

ポイント27pt

正規表現という規則で記述しないとだめなのです。

たとえば

if ( /^content-type:[ \t]*text\/html.*/ )

{

to "./Maildir.spam/"

}

正規表現の解説は本1冊くらいかかります。

id:happy778

回答ありがとうございます。

( /^content-type:[ \t]*text\/html.*/ )のどこに特定の文字を挿入すればいいのでしょうか?

転送先のアドレスがpostmaster@example.sakura.ne.jpの場合

to "!postmaster@example\.sakura\.ne\.jp"と表記すればいいのでしょうか?

よろしくお願い致します。

2008/11/05 14:57:37
id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351

ポイント26pt

if ( /.*Hatena.*/:b )

{

cc "!postmaster@example\.sakura\.ne\.jp"

}


…でいかがでしょうか?

本文に「Hatena」が含まれていた場合、postmaster@example.sakura.ne.jpに転送します。

参考ページ

http://kazulog.net/index.php?e=385

ただし、特定の文字列が日本語の場合、これでは動作しないかもしれません。

参考ページの管理人さんも失敗しているようです。

さくらのサーバーのユーザーではないため、確認できないので分かりませんが、日本語の場合は16進コードで記述するとマッチするかもしれません。


「はてな」→「\x82\xcd\x82\xc4\x82\xc8」

(バックスラッシュではなく半角の¥です。)

…となるので、下のように記述します。


if ( /.*\x82\xcd\x82\xc4\x82\xc8.*/:b )

{

cc "!postmaster@example\.sakura\.ne\.jp"

}


16進コードは、バイナリエディタで確認できます。

サクラエディタもしくはVxEditorなどのテキストエディタでも確認できます。

(※カーソル位置の16進コードがステータスバーに表示されます。)

id:happy778

回答ありがとうございます。

とても参考になりました。

しかし特定の文字を含まない全てのメールが転送されてしまいます。

他に何か記述が必要なのでしょうか…

また何かわかりましたら回答頂けると幸いです。

2008/11/09 18:29:15
id:language_and_engineering No.3

回答回数170ベストアンサー獲得回数63

ポイント27pt

.mailfilterには

cc "!xxx@gmail.com"

とだけ書いておき,まずメールのコピーをすべてgmailに転送します。

gmail側では

 設定→フィルタ→キーワード

で,その特定の文字列を入力し,本来の転送先のメールアドレスをセットします。


こうすれば,特定の文字列を含むメールはgmail経由で転送されてきます。

gmailアカウントを,転送時の振り分け用途のみで利用するという事です。

例えば,本文に自分の名前を含むメールのみ携帯に転送させるなどの用途でよくこのように使われています。

id:happy778

回答ありがとうございます。

そういう方法もありますね。

しかし.mailfilterの記述だけで転送する方法を探しています。

通常ポイントとさせて頂きます。

2008/11/09 18:32:17
  • id:rouge_2008
    回答を一部訂正します。

    メールの文字コードはJISですので、テキストエディタではなくバイナリエディタで確認してください。
    目的の文字列を記述したファイルをJISで保存して、バイナリエディタで開いてみると良いです。
    BZやEdbixならJISにも対応しています。
    「BZ」
    http://www.vector.co.jp/soft/win95/util/se032859.html

    テキストエディタで確認できる16進コードはSJISですので、マッチしないと思います。

    ※JISでもマッチしないかもしれませんが、試してみてください。


  • id:rouge_2008
    以前の質問でも記述済みの、以下の記述をしたままになっていないでしょうか?
    特定の文字を含まないメールもすべて送信されてくるということは、他の記述にマッチしているのだと思います。


    .mailfilterのファイルに
    if ( /^content-type:.*charset=.*(ISO-2022-JP).*/ )
    {
    to "!postmaster@example\.sakura\.ne\.jp"
    }


    上記の記述を削除した状態で、メールが転送されるか確認してみてください。
    ※まず、特定の文字列が英数字の場合に問題なく動作するかを試し、その後で日本語で動作するか試してみると良いです。
    (一応、特定の日本語をそのまま記述する方法も試してみてください。駄目ならJISの16進コードで…)
    特定の文字列を含むメールのみ転送されるようになった場合は、以下のように書き直すと良いです。


    if ( /^(C|c)ontent-(T|t)ype:.*charset=.*(ISO|iso)-2022-(JP|jp).*/)
    {
    if ( /.*\x24\x4f\x24\x46\x24\x4a.*/:b )
    {
    cc "!postmaster@example\.sakura\.ne\.jp"
    }
    }


    上記の場合、文字コードがISO-2022-JPで、なおかつ本文に「はてな」を含むメールのみ転送されます。
    ※「\x24\x4f\x24\x46\x24\x4a」=「はてな」
    (文字コードがJISの場合の16進コード)


    確認できないので確証はありませんが、問題なく動作する可能性もあります。
  • id:happy778
    何度も回答ありがとうございます。
    助かります。

    しかし、それでも全てのメールが転送されてしまいます。
    英数字でも日本語でも全て転送されてしまいます。
    なぜでしょうか…
    また何かわかりましたら教えて頂けると幸いです。
    解決した際にはお礼に100ポイントを送信させていただきます。

    メールヘッダーはこんな感じです。
    Return-Path : <***@docomo.ne.jp>
    Received : from docomo.ne.jp (mail.docomo.ne.jp [203.138.203.195]) by www.sakura.ne.jp (8.13.6/8.13.6) with ESMTP id mABHko09095 for <info@***.sakura.ne.jp>; Wed, 12 Nov 2008 01:17:01 +0900 (JST) (envelope-from ***@docomo.ne.jp)
    Date : Wed, 12 Nov 2008 01:17:00 +0900 (JST)
    From : ***@docomo.ne.jp
    To : info@***.sakura.ne.jp
    Subject :
    Message-Id : <IMTX0q3D104983950aJC@docomo.ne.jp>
    Mime-Version : 1.0
    Content-Type : text/plain; charset="iso-2022-jp"
    Content-Transfer-Encoding : 7bit
  • id:rouge_2008
    さくらのコントロールパネルの[メールの管理]で、転送設定をしていないでしょうか?
    http://support.sakura.ad.jp/support/manual/rs/setmail_c.shtml
    もし転送の設定をしているのでしたら、解除してから試してみてください。


    それでもすべてのメールが転送される場合は、現在.mailfilterに記述されている内容を教えていただけたらと思います。
    不都合のある部分は*などで隠してください。
    大してアドバイスできないかもしれませんが、よろしくお願いします。

  • id:happy778
    返信ありがとうございます。
    コントロールのメール管理で転送設定はしていません。
    ですが全て転送されてしまいます…

    .mailfilterの内容は

    if ( /^(C|c)ontent-(T|t)ype:.*charset=.*(ISO|iso)-2022-(JP|jp).*/)
    {
    if ( /.*\x24\x4f\x24\x46\x24\x4a.*/:b )
    {
    cc "!postmaster@***\.sakura\.ne\.jp"

    これです。はてなを本文に入力してもしなくても転送されてしまいます。
    特定の文字列を英数字にした場合は

    if ( /^(C|c)ontent-(T|t)ype:.*charset=.*(ISO|iso)-2022-(JP|jp).*/)
    {
    if ( /.*abcde.*/:b )
    {
    cc "!postmaster@***\.sakura\.ne\.jp"

    です。
    どこか記述が間違っていますでしょうか?

  • id:rouge_2008
    どこにも間違いはないように思います。
    「}」は省略しただけですよね?
    現在は、以下または特定の文字列を英数字にした場合の記述以外、他には何も記述されていないのでしょうか?


    if ( /^(C|c)ontent-(T|t)ype:.*charset=.*(ISO|iso)-2022-(JP|jp).*/)
    {
    if ( /.*\x24\x4f\x24\x46\x24\x4a.*/:b )
    {
    cc "!postmaster@***\.sakura\.ne\.jp"
    }
    }


    これしか記述されていない場合、マッチしない時は転送されないはずです。
    コントロールパネルでの転送設定もしていないのでしたら、やはり他の記述にマッチしていて、そのためすべてのメールが転送されているのではないかと思います。
    .mailfilterの記述内容を順番を変えずにそのままコピーした物をお願いします。
    (※もちろん記述の一部を*で隠しても大丈夫です。)
  • id:happy778
    返信ありがとうございます。
    「}」を省略していました汗。実際には記述しています。
    それでもやはり全て転送されてしまいます。

    .mailfilterの記述内容は以下が全てです。


    if ( /^(C|c)ontent-(T|t)ype:.*charset=.*(ISO|iso)-2022-(JP|jp).*/)
    {
    if ( /.*abcde.*/:b )
    {
    cc "!postmaster@***\.sakura\.ne\.jp"
    }
    }

    abcdeを含む本文を転送したいのですが、全て転送されてしまいます…
    また何かわかりましたら教えて頂けると幸いです。
  • id:rouge_2008
    おかしな動作ですね。
    すみませんが、まったく分かりません…。

    .mailfilterの最後の行にexitという記述はありますか?
    パーミッションが600になっているかも確認してください。

    上記が問題ない場合は、.mailfilterの記述を全部削除して、その状態でどうなるか確認してみてください。
    デフォルトの.mailfilterをバックアップしている場合は、そちらに戻すとどうなるかも確認してみると良いです。

    ※メールアカウントごとに.mailfilterがあるそうですが、編集する.mailfilterを間違えていませんよね?


    後は、例えばドコモからのメールを転送しない設定にして、.mailfilterがきちんと動作しているか確認するのも良いと思います。

    if ( /^Received *:.*.docomo.ne.jp/:h )
    {
    exit
    }


    ※他のルールを削除するか、あるいは上記のルールを一番上に記述します。
    ※Receivedの直後に「 」(半角スペース)を入れるのを忘れないでください。
    通常は「Received:~」のはずですが、提示されたヘッダでは「Received :」となっていたので…。(ドコモだけでしょうか…?)
    「Content-Type:」も「Content-Type :」のようですね。
    .mailfilterが機能していることを確認できたら、今度は以下のように記述してみてください。
    (※Content-Typeの後ろにスペースがあるかないかだけの違いで、両方にマッチします。)

    if ( /^(C|c)ontent-(T|t)ype *:.*charset=.*(ISO|iso)-2022-(JP|jp).*/)
    {
    if ( /.*abcde.*/:b )
    {
    cc "!postmaster@***\.sakura\.ne\.jp"
    }
    }

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません