Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

จัดการอีเมลขาเข้าในแอปพลิเคชันแร็คใด ๆ

ลูกค้าของคุณเพิ่งโทรมา...

เขาต้องการให้แอปจัดการอีเมลขาเข้า . เช่นเดียวกับเบสแคมป์

ไม่มีปัญหา คุณคิดว่าบริการมากมายจะส่งอีเมลถึงคุณโดย POST ไปยังแอปของคุณ ควรจะง่าย ใช่ไหม

ไม่นะ

แต่ละบริการใช้รูปแบบที่เป็นกรรมสิทธิ์ บางคนส่งอีเมลที่แยกวิเคราะห์ให้คุณบางคนส่งแบบดิบ บางคนส่งลายเซ็นรับรองความถูกต้อง บางอย่างไม่ได้

คงจะดีไม่น้อยถ้าคุณสามารถข้ามส่วนนี้ไปและทำงานกับวัตถุทับทิมมาตรฐาน (ที่รู้จักกันดี) ได้

จะดีกว่าไหมถ้าคุณสามารถเปลี่ยนผู้ขาย...โดยไม่ต้องเขียนโค้ดใหม่

หากคุณกำลังใช้ Incoming! คุณก็ทำได้

TL;DR

กำลังมา! รับ Rack::Request และให้ Mail::Message . แก่คุณ

บริการที่รองรับ

ขาเข้ารองรับบริการที่ยอดเยี่ยมเหล่านี้:

  1. SendGrid

  2. Mailgun

  3. ตราไปรษณียากร

  4. CloudMailin

  5. เซิร์ฟเวอร์อีเมลจริงที่คุณดำเนินการเอง (ว้าว)

ดีที่สุดคือขยายได้ง่าย มันเข้ากันได้กับบริการที่ยังไม่มีอยู่แล้ว! (ไม่เชิง แต่ประมาณนั้น)

เหตุใดฉันจึงต้องการอีเมลขาเข้า

การให้ตัวเลือกแก่ผู้คนในการทำบางสิ่งโดยการส่งอีเมลถึงคุณทำให้พวกเขามีแนวโน้มที่จะทำสิ่งนั้นมากขึ้น

เราสร้างขาเข้า! สำหรับ honeybadger.io เราต้องการวิธีปรับปรุงการอภิปรายเกี่ยวกับข้อผิดพลาด ตัวอย่างเช่น คุณสามารถแสดงความคิดเห็นเกี่ยวกับข้อผิดพลาดใดๆ เพียงแค่ตอบกลับการแจ้งเตือน ความคิดเห็นส่วนใหญ่ของเรามาในลักษณะนี้ ดังนั้นเราจึงถือว่านี่เป็นชัยชนะครั้งใหญ่

ในขณะที่เขียนนี้ อัญมณีถูกใช้ภายในโดยทีม Honeybadger เป็นเวลาประมาณหกเดือน

แสดงรหัสให้ฉันดู!

นี่เป็นตัวอย่างง่ายๆ โดยใช้ 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 whoever@wherever.com 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
`

แค่นั้นแหละ.

เข้ามาได้อย่างไร! เทียบกับอัญมณีอื่น?

มีอัญมณีอื่น ๆ ในพื้นที่นี้ Griddler ของ Thoughtbot ที่โดดเด่นที่สุด

อย่างไรก็ตามมีบางสถานที่ที่เข้ามา! โดดเด่น มัน:

  1. รองรับบริการอีเมลหลายรายการ

  2. ทำงานร่วมกับแอปพลิเคชันแร็คใดก็ได้ ไม่ใช่แค่ราง

  3. มอบ Mail::Message . มาตรฐานให้คุณ

  4. ไม่ตั้งสมมติฐานเกี่ยวกับกรณีการใช้งานของคุณ

คุณมีรูปมีมให้ฉันไหม

ใช่ ใช่ เราทำ

จัดการอีเมลขาเข้าในแอปพลิเคชันแร็คใด ๆ