Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

ラックアプリケーションで受信メールを処理する

クライアントから電話がありました...

彼は自分のアプリで受信メールを処理することを望んでいます 。 Basecampと同じように。

問題ありません。多くのサービスがPOSTでアプリにメールを送信します。簡単なはずです。でしょ?

いいえ。

各サービスは独自の形式を使用します。 解析された電子メールを送信するものもあれば、生で送信するものもあります。認証署名を送信するものもあります。しない人もいます。

この部分をスキップして、標準の(よく知られている)ルビーオブジェクトを操作できたら素晴らしいと思いませんか?

コードを書き直さずにベンダーを変更できたら素晴らしいと思いませんか?

Incoming!を使用している場合は、できます。

TL; DR

入ってくる! Rack::Requestを受け取ります Mail::Messageを提供します

サポートされるサービス

着信はこれらの優れたサービスをサポートします:

  1. SendGrid

  2. メールガン

  3. 消印

  4. CloudMailin

  5. 自分で実行している実際のメールサーバー(すごい)

何よりも、拡張は簡単です。そのため、まだ存在していないサービスとはすでに互換性があります。 (実際にはそうではありませんが、一種です)

では、なぜ受信メールが必要なのですか?

メールを送信して何かをするオプションを人々に与えると、彼らはそれを行う可能性が高くなります。

Incomingを構築しました! honeybadger.ioの場合。エラーに関する議論を合理化する方法が必要でした。たとえば、通知に返信するだけでエラーにコメントできます。私たちのコメントのほとんどはこのように来ているので、私たちはそれを大きな勝利と考えています。

この記事を書いている時点で、この宝石はHoneybadgerチームによって約6か月間社内で使用されています。

コードを見せてください!

CloudMailinを使用した簡単な例を次に示します。

`# First, you define an email receiver class
class EmailReceiver < Incoming::Strategies::CloudMailin
  def receive(mail)
    puts %(Got message from #{mail.to.first} with subject "#{mail.subject}")
  end
end

# Then you feed it a Rack::Request object. And you're done. 
req = Rack::Request.new(env)
result = EmailReceiver.receive(req) # => Got message from [email protected] with subject "hello world"
`

詳細については、Readmeをご覧ください。

しかし、Railsではどのように使用しますか?

着信を使用する!レールでの使用も同様に簡単です。サンプルアプリを作成しましょう。

要件:私はテキストメッセージが嫌いです。それは私のちょっとしたことです。ただし、婚約者がクラスにいる間は、婚約者にラブノートを送信できるようにする必要があります。

明らかに、答えは電子メールからSMSへのブリッジを構築することです!

まず、メール受信者を設定します:

`# app/email_receivers/incoming.rb
class EmailToSmsReceiver < Incoming::Strategies::Postmark
  def receive(mail)
    send_sms([mail.subject, mail.body].join(": "))
  end
  private
    def send_sms(message)
      # Insert twilio magic here
    end
end
`

次に、リクエストをレシーバーにパイプするコントローラーを追加します:

`# app/controllers/emails_controller.rb
class EmailsController < ActionController::Base
  def create
    if EmailToSmsReceiver.receive(request)
      render :json => { :status => 'ok' }
    else
      render :json => { :status => 'rejected' }, :status => 403
    end
  end
end
`

そうそう、ルートが必要です:

`# config/routes.rb
Rails.application.routes.draw do
  post '/emails' => 'emails#create'
end
`

それだけです。

どのように着信しますか?他の宝石と比較しますか?

このスペースには他にも宝石があります。最も顕著なのはThoughtbotのGriddlerです。

ただし、着信する場所がいくつかあります。際立っている。それ:

  1. 複数のメールサービスをサポート

  2. 任意のラックアプリケーションで動作します 、レールだけではありません

  3. 標準のMail::Messageをお渡しします

  4. ユースケースについて推測しません

私のためのミーム写真はありますか?

はい、そうです。

ラックアプリケーションで受信メールを処理する


  1. EmailJS を使用して Vue.js アプリケーションからメールを送信する方法

    数日前、私は単純な Vue プロジェクトに取り組むことに決め、作成した連絡先からメールを送信する必要がありました。誰かが私の連絡先フォームに記入するたびに、自動化された電子メールを受け取りたいと思っていました。 そこで私は検索を開始し、EmailJs にたどり着きました。この記事を書くことにしたのは、彼らのドキュメントが素晴らしく、とても使いやすいと感じたからです。また、それが誰かの助けになることを願っています:) 始めましょう! この記事では、EmailJS を使用して Vuejs アプリケーションからメールを送信する方法を紹介します。 続行する前に、Vue CLI を使用してミニ

  2. iPhone または Android の写真で「深度効果」を取得する方法

    iPhone 7 はポートレート モードでも見事な写真を撮ることができます。ポートレート モードの写真をクリックすると、被写界深度効果が追加されます。もちろん、この種の効果で写真をクリックするには、iPhone7 または DSLR または同様のカメラが必要です。しかし、良いニュースは、この効果をスマートフォンの通常の画像に追加できることです。さらに先に進む前に、被写界深度とは正確には何なのかを詳しく理解しましょう。 写真における被写界深度とは、前にあるものはくっきりと鮮明に写り、背景にあるものはぼやけることを意味します。与えられた画像ではっきりと理解できます。 そのため、携帯電話で撮影