PHPでメール投稿のプログラムを作成しています。

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

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

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

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

回答の条件
  • 1人2回まで
  • 登録:2009/06/18 15:23:20
  • 終了:2009/06/24 12:22:44

回答(2件)

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752009/06/18 17:37:28

ポイント35pt

一番簡単だと思うのは、

PEAR::Mail_mimeDecode

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

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

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

一行ずつ読んでいって、

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

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

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


何かの参考になれば。

id:kt26

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

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

2009/06/19 13:20:41
id:tdoi No.2

tdoi回答回数174ベストアンサー獲得回数752009/06/19 20:49:10

ポイント35pt

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

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

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

参考:

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

id:kt26

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

2009/06/23 20:22:23

コメントはまだありません

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません