【问题标题】:ActionMailer not returning full from addressActionMailer 未从地址完整返回
【发布时间】:2014-06-20 11:19:22
【问题描述】:

我正在使用 ActionMailer,并在测试中尝试验证是否已设置正确的发件人地址。但是,当我使用带有发件人姓名的发件人地址时,我只会在调用#from 时才能获得电子邮件地址,我需要检查整个事情。我试过检查#sender,但那是零

例子:

msg1 = ActionMailer::Base::mail(:from => "sender name <test@example.com>").from
=> ["test@example.com"]

如果我to_s 对象,它似乎确实使用了包含发件人姓名的完整电子邮件:

msg1.to_s
=> "Date: Fri, 20 Jun 2014 11:14:53 +0000\r\nFrom: sender name    <test@example.com>\r\nMessage-ID: <XXXX>\r\nSubject: Mail\r\nMime-Version: 1.0\r\nContent-Type: text/plain;\r\n charset=UTF-8\r\nContent-Transfer-Encoding: 7bit\r\n\r\n"

如何验证发件人地址(包括发件人姓名)是否设置正确?

【问题讨论】:

  • 在这种情况下你可以使用正则表达式,检查我的答案。

标签: ruby-on-rails email


【解决方案1】:

我可能无法正确理解您的问题,但如果我猜对了,您可以获得如下信息:

msg1 = ActionMailer::Base::mail(:from => "sender name <test@example.com>")

msg1.from
=> ["test@example.com"]

msg1.date
=> Fri, 20 Jun 2014 18:58:38 +0530

msg1.message_id
=> "53a43706753f4_49053fb4eba3f9b43008a@shivam.mail"

msg1.message_content_type
=> "text/plain"

msg1.main_type
=> "text"

msg1.subject
=> "Mail"

您也可以简单地输入msg1. 并点击&lt;tab&gt; 两次。终端会询问 Display all 293 possibilities? (y or n) 按 y,您可以看到可以从该特定选项中提取的所有信息。

编辑

我想我现在更好地理解了这个问题并做了一些研究。您输入发件人姓名的方式,您似乎无法直接检索它。但是,在这种情况下,我们可以使用正则表达式。这里的代码,我知道它(非常)脏,但它仍然有效:

pat = "(?<=From:)(.*)(?=<#{msg1.from.to_s})"
/#{pat}/.match(msg1.inspect)[0].strip

【讨论】:

  • 您能验证一下@Ceri 吗?谢谢
  • 谢谢 - 我最初确实使用了正则表达式匹配,但最后一位同事提出了一种更好的方法,使意图更加清晰。
【解决方案2】:

最初我使用 singhshivam 描述的正则表达式。

不过,经过一番研究,一位同事建议您可以这样做:

msg1.header[:from].to_s

我觉得这是一个更好的解决方案,因为它允许我使用 assert_equal 而不是 assert_match,因此意图更明确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 2012-01-17
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多