Estoy usando SMTP API de SendGrid en mi aplicación Rails para enviar correos electrónicos. Sin embargo, estoy teniendo problemas para probar el encabezado del correo electrónico ("X-SMTPAPI") usando RSpec.Cómo probar encabezados de correo electrónico usando RSpec
Aquí es lo que el correo se ve así (la recuperación de 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]"]}>>
Aquí está mi código de especificación (que no):
ActionMailer::Base.deliveries.last.to.should include("[email protected]")
También he intentado varias método para recuperar la cabecera ("X-SMTPAPI") y no funcionaba bien:
mail = ActionMailer::Base.deliveries.last
mail.headers("X-SMTPAPI") #NoMethodError: undefined method `each_pair' for "X-SMTPAPI":String
Ayuda?
Update (respuesta)
Resulta que yo puedo hacer esto para recuperar el valor de la cabecera del correo electrónico:
mail.header['X-SMTPAPI'].value
Sin embargo, el valor devuelto es en formato JSON. Entonces, todo lo que necesita hacer es decodificarlo:
sendgrid_header = ActiveSupport::JSON.decode(mail.header['X-SMTPAPI'].value)
que devuelve un hash, donde puedo hacer esto:
sendgrid_header["to"]
para recuperar el conjunto de direcciones de correo electrónico.
Gracias. Revisé la gema email_spec. El marcador "deliver_to" es similar al marcador "to" (que devuelve "[email protected]" en lugar de "[email protected]") y el marcador "have_header" simplemente devuelve el encabezado completo. De todos modos, he encontrado una solución a esto y lo publicaré ahora. ¡Gracias! –