Если вы прочитаете документы для Mail
, вы найдете хорошее альтернативное решение, которое будет работать. Вместо использования:
Mail.deliver do
to @recipient # throws error as this is undefined
from 'server@domain.com'
subject 'testing sendmail'
body 'testing sendmail'
end
Вы можете использовать метод Mail new()
, передавая параметры и игнорируя блок:
Mail.new(
to: @recipient,
from: 'server@domain.com',
subject: 'testing sendmail',
body: 'testing sendmail'
).deliver!
или определения альтернативных элементов хеша:
Mail.new(
:to => @recipient,
:from => 'server@domain.com',
:subject => 'testing sendmail',
:body => 'testing sendmail'
).deliver!
В pry или irb вы увидите:
pry(main)> Mail.new(
pry(main)* to: 'me@domain.com',
pry(main)* from: 'me@' << `hostname`.strip,
pry(main)* subject: 'test mail gem',
pry(main)* body: 'this is only a test'
pry(main)* ).deliver!
=> #<Mail::Message:59273220, Multipart: false, Headers: <Date: Fri, 28 Oct 2011 09:01:14 -0700>, <From: me@myhost.domain.com>, <To: me@domain.com>, <Message-ID: <4eaad1cab65ce_579b2e8e6c42976d@myhost.domain.com>>, <Subject: test mail gem>, <Mime-Version: 1.0>, <Content-Type: text/plain>, <Content-Transfer-Encoding: 7bit>>
Метод new
имеет несколько вариантов, которые вы можете использовать. Это также из документации и может работать лучше:
В качестве примечания вы также можете создать новое электронное письмо, напрямую создав объект Mail :: Message, а затем передав значения через строковые, символьные или прямые вызовы методов. См. Mail :: Message для получения дополнительной информации.
mail = Mail.new
mail.to = 'mikel@test.lindsaar.net'
mail[:from] = 'bob@test.lindsaar.net'
mail['subject'] = 'This is an email'
mail.body = 'This is the body'
, за которым следует mail.deliver!
.
Также обратите внимание, в предыдущем примере, что существует несколько способов доступа к различным заголовкам в конверте сообщения. Это гибкий камень, который, кажется, хорошо продуман и хорошо следует Ruby.