Tôi đang sử dụng số SMTP API của SendGrid trong ứng dụng Rails của tôi để gửi email. Tuy nhiên, tôi đang gặp rắc rối khi kiểm tra tiêu đề email ("X-SMTPAPI") bằng cách sử dụng RSpec.Cách kiểm tra tiêu đề email bằng cách sử dụng RSpec
Đây là những gì những email trông giống như (lấy từ ActionMailer :: Base.deliveries):
#<Mail::Message:2189335760, Multipart: false, Headers:
<Date: Tue, 20 Dec 2011 16:14:25 +0800>,
<From: "Acme Inc" <[email protected]>>,
<To: [email protected]>,
<Message-ID: <[email protected]>>,
<Subject: Your Acme order>, <Mime-Version: 1.0>,
<Content-Type: text/plain>, <Content-Transfer-Encoding: 7bit>,
<X-SMTPAPI: {"sub":{"|last_name|":[Foo],"|first_name|":[Bar]},"to":["[email protected]"]}>>
Dưới đây là mã của tôi spec (mà thất bại):
ActionMailer::Base.deliveries.last.to.should include("[email protected]")
Tôi cũng đã thử khác nhau để lấy tiêu đề ("X-SMTPAPI") và không hoạt động:
mail = ActionMailer::Base.deliveries.last
mail.headers("X-SMTPAPI") #NoMethodError: undefined method `each_pair' for "X-SMTPAPI":String
Trợ giúp?
Cập nhật (câu trả lời)
Hóa ra, tôi có thể làm điều này để lấy giá trị của tiêu đề email:
mail.header['X-SMTPAPI'].value
Tuy nhiên, giá trị trả về là ở định dạng JSON. Sau đó, tất cả những gì cần làm là để giải mã nó:
sendgrid_header = ActiveSupport::JSON.decode(mail.header['X-SMTPAPI'].value)
mà trả về một băm, nơi tôi có thể làm điều này:
sendgrid_header["to"]
để lấy mảng các địa chỉ email.
Cảm ơn. Tôi đã kiểm tra email_spec gem. Matcher "deliver_to" tương tự như matcher "to" (trả về "[email protected]" thay vì "[email protected]") và matcher "has_header" đơn giản trả về tiêu đề đầy đủ. Dù sao, tôi đã tìm ra một giải pháp cho điều này và sẽ đăng nó lên ngay bây giờ. Cảm ơn! –