人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでメール投稿のプログラムを作成しています。
仕組みは、設定したメールアドレスにメールを送信すると
タイトル・本文・送信日を取得して、DB(MySQL)に保存されるというものです。

メールをfsockopenで取得し、メールデータを正規表現を使って分割し、
それぞれ必要箇所を取得しているのですが、
タイトルの文字数が多い場合、途中で切れてしまいます。

調べたところ、メールの仕様で長いタイトルは途中で改行されてしまうそうです。
どのようにすれば対処可能か調べきれなかったので、ご存じの方は、教えて下さい。

ちなみに、以下のようなコードを書いて、メールデータのSubject部分を抜き出そうとしました。
preg_match('/\nSubject:[ \t]*([^\r\n]+)/', $mail_data, $subject);

●質問者: kt26
●カテゴリ:ウェブ制作
✍キーワード:DB MySQL PHP うそ コード
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tdoi
●35ポイント

一番簡単だと思うのは、

PEAR::Mail_mimeDecode

http://pear.php.net/manual/ja/package.mail.mail-mime.php

を使ってしまうことだと思います。

どうしても、自前で解析したいということであれば、一行ずつ読んで解析していく方が簡単かもしれません。

一行ずつ読んでいって、

「Subject:」から始まる行があれば、それからはサブジェクトとして判断して解析し、次の行を見たときに、.から始まっていれば、サブジェクトの続きと判断する。

みたいに、仕様に忠実に解釈する必要がありちょっと泥臭いかもです。

使えるなら、既存のライブラリを使った方が間違いも少ないので、オススメはできません。


何かの参考になれば。

◎質問者からの返答

回答ありがとうございます。そのライブラリは知っているのですが、勉強の為に自作を考えています。

後はSubjectの部分だけなので、どうにか解決法は無いかと思っているのですが・・・もう少し様子を見ます。


2 ● tdoi
●35ポイント

どうしても正規表現でということであれば、こんなのはどうですか?

/\r\nSubject:[ \t]*[a-zA-Z0-9\+\/]+\r\n( [a-zA-Z0-9\+\/]*\r\n)*/im

あとは、このあたりは参考になるかもです。

参考:

http://adiary.blog.abk.nu/0213

◎質問者からの返答

ありがとうございます。ぜひ参考にさせていただきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ