- PR -

ブログを携帯電話でのメールで書き込む方法。

投稿者投稿内容
よろしくお願いします。
常連さん
会議室デビュー日: 2006/01/17
投稿数: 21
投稿日時: 2008-01-12 05:25
初めて投稿させていただきます。

最近、某ブログサイト(以降、Mブログ)にてブログを書くようになったのですが、
Mブログでは、携帯電話のメールからブログの記事を書き込むことができます。
「便利になったなぁ〜」と関心していたのですが、その仕組みが気になり、
簡単にですが調べてみました。

・携帯メールから新規に記事を書き込む際、ブロガー毎に
  『ブログ書込用メールアドレス』
 が、割り振られ、そのアドレスに対して携帯メールを送信
 することで、新規に記事を書き込むことができる。
・携帯メールから既存に記事を更新/修正する際、ブロガー毎&既存記事毎に
  『ブログ更新用メールアドレス』
 が、割り振られ、そのアドレスに対して携帯メールを
 送信することで、既存の記事を更新/修正ができる。

と、なっていました。

以上のことから、
 「Mブログでは、動的にメールアカウントを作成している?」
と、考えたのですが、前述にもあるとおり、既存の記事を更新/修正する
際にも、メールアカウントが作成されてしまうことになります。
となると、
 「メールアカウント数は、とんでもない数になってしまうのでは?」
と思いました。

そこで、私が思いついた方法なのですが、
 サーバ側(sendmail)にて、実際には、存在しないメールアカウント(User unknown)に
 対してのメールを受信した場合、受信したメールをパラメータとして
 渡しつつ、特定のプログラムを起動しなんらかの処理(この場合、ブ
 ログの新規書込or更新/修正)を行う。
でした。

質問1.
 私が思いついた方法では、実現することができるのでしょうか?
質問2.
 自分で考えた方法は、あまりにもひどいと思うのですが、他に
 なにかよい方法はありますでしょうか?

以上、ご意見よろしくお願いいたします。
よろしくお願いします。
常連さん
会議室デビュー日: 2006/01/17
投稿数: 21
投稿日時: 2008-01-12 05:49
『質問1』の具体的なやり方を調べて考えてみました。

1.sendmailにて、
    define(`LUSER_RELAY',`local:ブログメール処理ユーザ')dnl
  と設定し、「User unknown:550」となるメールを
  「ブログメール処理ユーザ」が受信するようにする。

2.「ブログメール処理ユーザ」の「.forward」に、
    "/usr/local/bin/php -q /usr/home/ブログメール処理ユーザ/mailToBlog.php"
  と、設定し実際の処理を実行させる。

机上の空論でしょうか?
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2008-01-12 09:13
Sendmailは名前しか知らないのでアレなんですが。

・MTA上でエイリアスを指定しておき、すべてのメール(あるいは一定条件を満たしたメール)をすべて特定のメールアドレス宛として処理する。

・その特定のメールアドレス宛に来たメールに対し、自動返信などのために実装されているMTAのパイプ機能を利用してPHPやCGIを起動し、処理を渡す。

・PHPまたはCGIでメールの情報を受け取り、データベースを利用してユーザーの特定を行い、何らかの処理を行う。

って感じで普通に実装できると思います。
多分同じこと言ってるんだと思いますけれど。

よく空メールを送るだけで登録できるシステムとかありますよね?
基本的な仕組みはあれと変わらないので、それを調べてみるといいかもしれません。
F/A
ぬし
会議室デビュー日: 2006/03/18
投稿数: 312
お住まい・勤務地: Tokyo
投稿日時: 2008-01-12 12:34
まぁ、実際どのように実現しているかは
そのブログシステムのソースを確認するしかないわけですが…

そもそもsendmailなのかどうかもわかりませんが…

LUSER_RELAYのような方法は別に机上の空論というわけではありませんが、
本当に存在しないアカウント宛のメール(スパムとか)の処理を考えると、
多少面倒な気がします。
(存在しないアカウントなら無視でよければ、特に問題はありません)

OakBowさんと同意見ですけど、
単純に各記事毎/アカウント毎にエイリアス(aliasesファイル もしくはLDAPとかSQL?)が登録してあって、
そこから何かのアクションが実行されるという方が現実的な気がしますけど…



[ メッセージ編集済み 編集者: F/A 編集日時 2008-01-12 12:35 ]
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2008-01-12 13:13
自分の意見に補足。
MTAに詳しい訳ではないので用語とかアレですが。
ブログの投稿も更新も、仕組みとしては同じなはず。

1.
ブログの新規作成用メールアドレスを、blogpost.****@example.comとかいう風に発行。
****の部分はユーザーを識別するIDとかそういうもの。
このメールアドレスはMTA上には登録されませんし、実在しません。

2.
1より時系列では前になるけど、blogpost@example.comというメールアドレスを登録。
これはMTA上にきちんと登録する実在するメールアドレス。

3.
これも1より時系列では前。
 blogpost.****@example.comという宛先にメールが着たらblogpost@example.com宛として扱うようにエイリアスをMTA上で登録。

4.
 blogpost@example.com宛にメールが着たら、From:、To:、Subject:やメッセージボディをパイプ処理でCGIに渡せるように、MTAの自動返信なりなんなりの機能を利用して設定する。

5.
CGI側。受け取ったメール情報のFrom:やTo:ヘッダからユーザーの識別を行い、Subject:やメッセージも含めて正当であればブログの更新処理を行う。

6.
 blogpost@example.comにはspamとかいろいろ紛れ込むので、定期的にメッセージボックスを削除する処理を仕込む。


この手の仕組みはすでに10年位前には存在してて、やり方は特に代わり映えしてないです。
MTAの仕様により細かい所作が違うだけで、どこも一緒かな。
組み合わせとしてとても多いsendmailでの実例もあると思うので、実装したいなら検索してみると情報ワラワラ手に入ると思います。
まあ、概ねお考えになった概要そのままですよん。

※メールアドレスがリンクになっちゃったので行頭に空白を入れて対処。

[ メッセージ編集済み 編集者: OakBow 編集日時 2008-01-12 13:15 ]

[ メッセージ編集済み 編集者: OakBow 編集日時 2008-01-12 13:15 ]

[ メッセージ編集済み 編集者: OakBow 編集日時 2008-01-12 13:16 ]
よろしくお願いします。
常連さん
会議室デビュー日: 2006/01/17
投稿数: 21
投稿日時: 2008-01-12 17:43
OakBow様
F/A様

ご返答ありがとうございます。
当初、私もお二人がおっしゃっているようなことを考えました。

※OakBow様のご回答を時系列順に修正
1.
blogpost @example.comというメールアドレスを登録。
これはMTA上にきちんと登録する実在するメールアドレス。

2.
blogpost.**** @example.comという宛先にメールが着たら
blogpost @example.com宛として扱うようにエイリアスをMTA上で登録。

3.
ブログの新規作成用メールアドレスを、blogpost.****@example.comとかいう風に発行。
****の部分はユーザーを識別するIDとかそういうもの。
このメールアドレスはMTA上には登録されませんし、実在しません。
        :(以降、省略)

私がこの方法の具体的なやり方を考えたとき、「2.」のところで
わからなくなってしまいました。

「2.」の部分は、言い方をかえると、
 「動的にメールアカウントのエイリアスを作成する」
となるとおもいます。

これを、MTAでおこなう方法がわからなかったのです。
※sendmailでは、エイリアスを追加する度に、sendmailデーモンを再起動
 させる必要があるので、追加する度にデーモンの再起動をすることは…
 ないと思いました。

質問の内容が変わってきてしまうと思いますので、
 「MTAにて動的にメールアカウントのエイリアスを作成する方法」
と、いう内容で別スレッドを立てて質問してみます。

ご回答ありがとうございました。
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2008-01-12 18:40
あ、ちょっと分かりにくかったですね。
2のエイリアス作成は動的には行いません。
MTAによって違うでしょうけど、エイリアスにはワイルドカードが使えたりするので、
 blogpost.??????@example.com -> blogpost@example.com
 blogpost.*@example.com -> blogpost@example.com
なんて設定が可能だったりします。
ブログ作成用のメールアカウントの命名規則をきちんと決めておき、このようにワイルドカードを使えるようなものにしておけば、エイリアスの設定は最初の一回だけですみます。

こういうワイルドカードが使えない場合は
 * -> blogpost@example.com
みたいに実在しないメールアドレスすべてを受け入れる形にするしかなくなりますけどね。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2008-01-12 19:21
こんにちは

私の場合は
sendmail + mailertable を使用して実現しています。

[/etc/mail/mailertable]
@blogpost.example.com local:blogpost

[~/blogpost/.forward]
\blogpost,"| /etc/smrsh/blogpost.proc"

最近のsendmailはセキュリティの関係でプログラム起動に制限があるので注意
検索キーワード: smrsh

/etc/procmailrc でも出来そうだけど、試してません。

スキルアップ/キャリアアップ(JOB@IT)