Webサービスを作って潰すのが趣味な人のブログ

とりあえず作ってから怒られよう

【作ってみた】IPhone用にメールで音楽ファイルを添付してTmBoxに投稿できる「mp3変換君」を作りました

どうもtkです。


IPhoneを利用している場合ブラウザでボイスメモなどの音楽ファイルをアップロードする事ができません(画像・動画のみ)

そこでファイルの種類に制限が無い「メール添付」を行い一時的にサーバー側にアップロードし、そのURLをアップロード元とすることでこの制限を回避しています

しかしこのシステムを作ったのも気づけば3年前。エラーなのかメモリ不足なのかしょっちゅう「使えなくなりました」と報告されます。

送信者は99%がIPhoneであり環境依存問題などはないため原因は簡単につかめると思ったのですが調べても原因がわからないまま3年が経過。やっと重い腰を上げてリニューアルを行いました。多分安定性は格段に増すと思われます。

 

技術的な話

メールの受信

postix」を利用しています。受け取ったメールはこんな感じでコマンドに流せます。

vim /etc/aliases # aliasesファイルを編集
postalias /etc/aliases # 編集したらAliaseファイルを再作成
newaliases # 新たに作成したAliaseファイルをpostfixに反映

/etc/aliases」に書いたコマンドはメールを受信する度に実行されます。例えば「echo "hoge"」と書いておけばメールを受信する度に「hoge」と吐き出します

Railsコマンドを走らせる

mp3convert: "|/bin/bash -l -c 'cd /var/www/mp3covertapp && bundle exec rails runner -e production '\\\''ConvertMail.receive(STDIN.read)'\\\'''"

「\」の数や「'」の数に注意して下さい。長いですがとりあえずこれで動きます。「ConvertMail」は自分が用意したmailerです。僕の場合は「/app/mailer/convert_mail.rb」ですが適宜読み替えて下さい。

添付ファイルの取得

/app/mailer/convert_mail.rb
class ConvertMail < ActionMailer::Base
  default from: "hoge@fuga.net"
  def receive(email)
    from = email.from[0]
    if email.has_attachments?
      # ファイルが添付さている
      attachment = email.attachments[0]
    end
  end
end

適当に処理してください。タイトルとかもとれますがそこら辺はググって下さい。

その他

今回デザインを組むに当たり初めてTwitterBootStrapを利用してみました。いやー自動でフラットデザインに対応してくれるのはすっごく楽ですね。今後も小さいアプリの場合は採用するかもしれません。
newrelicもいれたので今後はエラーが発生してもどうにかなると信じています。