Я использую SMTP API SendGrid в своем приложении Rails для отправки электронных писем.Тем не менее, я сталкиваюсь с проблемами при тестировании заголовка электронного письма («X-SMTPAPI») с использованием RSpec.
Вот как выглядит электронное письмо (получение из ActionMailer :: Base.deliveries):
#<Mail::Message:2189335760, Multipart: false, Headers:
<Date: Tue, 20 Dec 2011 16:14:25 +0800>,
<From: "Acme Inc" <contact@acmeinc.com>>,
<To: doesntmatter@nowhere.com>,
<Message-ID: <4ef043e1b9490_4e4800eb1b095f1@Macbook.local.mail>>,
<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":["foo@bar.com"]}>>
Вот мой код спецификации (который не удался):
ActionMailer::Base.deliveries.last.to.should include("foo@bar.com")
Я также пробовал различные методы для получения заголовка ("X-SMTPAPI") и тоже не работал:
mail = ActionMailer::Base.deliveries.last
mail.headers("X-SMTPAPI") #NoMethodError: undefined method `each_pair' for "X-SMTPAPI":String
Справка?
Обновление (ответ)
Оказывается, я могу сделать это, чтобы получить значение заголовка письма:
mail.header['X-SMTPAPI'].value
Однаковозвращаемое значение в формате JSON.Затем все, что мне нужно сделать, это декодировать его:
sendgrid_header = ActiveSupport::JSON.decode(mail.header['X-SMTPAPI'].value)
, который возвращает хеш, где я могу сделать это:
sendgrid_header["to"]
, чтобы получить массив адресов электронной почты.