0

在块内设置delivery_method立即delivery而不是设置defaults 发送似乎与以下代码配合良好:

    Mail.deliver do
      delivery_method :smtp,
        address: "smtp.gmail.com",
        domain: "#####",
        port: 587,
        user_name: from,
        password: "#####",
        enable_starttls_auto: true
      from     from
      to       to
      subject  subject
      body     "default body"
    end

但是我该如何做同样的阅读呢?

Mail.last do
  retriever_method :imap,
    user_name: to,
    password: password,
    address: server,
    port: port,
    enable_ssl: true
end

原因

*** NoMethodError Exception: undefined method `retriever_method' for #<RSpec::ExampleGroups::Nested::Nested_2::Nested::Email_2:0x00007fa246110478>
4

1 回答 1

1

仅供参考:这个宝石是 OSS。

Mail#delivery_method技术上是 的别名Configuration.instance.delivery_method

Mail#retriever_method反过来重定向到Configuration.instance.retriever_method.

不同Mail::deliver的是,它创建一个新实例Mail::last 显式调用retriever_method.last(*args, &block).

正如人们可能看到的那样,实例允许覆盖delivery_method,但不允许覆盖retriever_method

所以你应该存储Configuration.instance.retriever_method到中间变量中,更新它,调用Mail::last并恢复它。有点沿着这些思路:

Configuration.instance.instance_eval do
  generic_retriever_method = retriever_method
  retriever_method :imap,
    user_name: to,
    password: password,
    address: server,
    port: port,
    enable_ssl: true
  Mail.last
  retriever_method = generic_retriever_method
end
于 2019-08-12T16:23:57.620 回答