通过电子邮件发送发件人名称SendGrid-Rails

时间:2018-08-02 07:42:56

标签: ruby-on-rails sendgrid

我正在使用SendGrid从我的应用程序发送电子邮件。我想与sender name一起发送sender email,例如from: 'Maxcreet <contact@maxcreet.com>'

使用Letter OpenerMailTrap可以正常工作,但SendGrid仅显示发件人电子邮件。

这是我的SendGrid函数,用于发送电子邮件。

def deliver!(mail)
  email.from = SendGrid::Email.new(email: mail[:from].addrs.first.address)
  email.subject = mail.subject
  email.add_personalization(build_personalization(mail))
  build_content(mail)
  send!(email)
end

我已经使用mail[:from]检查了puts的值,它给出了以下值:

puts mail[:from]                      => Maxcreet <support@maxcreet.com>
puts mail[:from].addrs                => Maxcreet <support@maxcreet.com>
puts mail[:from].addrs.first          => Maxcreet <support@maxcreet.com>
puts mail[:from].addrs.first.address  => support@maxcreet.com

3以上对我来说似乎还可以,但是当我在其中使用其中任何一个

email.from = SendGrid::Email.new(email: mail[:from].addrs.first.address)

它没有发送我的电子邮件,甚至在sendgrid仪表板中也找不到我的电子邮件。

下面的this也尝试了email.fromname,但这甚至不起作用。

2 个答案:

答案 0 :(得分:3)

SendGrid的ruby API具有名为name而不是fromname的选项。

因此以下内容可以解决您的问题。

email.from = SendGrid::Email.new(
  email: mail[:from].addrs.first.address, 
  name:  mail[:from].addrs.first.name
)

我从this doc开始尝试了这一点。

答案 1 :(得分:0)

看起来您正在混合宝石或物体。 SendGrid::Email.new仅需要一个from字符串,并且可能支持一个name字符串。您正在使用mail[:from]mail[:from].addrs.first.address哈希中提取地址,但是需要提供名称作为唯一的密钥。

SendGrid Ruby gem“厨房水槽”示例中,它们在From参数上没有显示name,但在personalization上却显示了。

尝试:email.from = SendGrid::Email.new(email: 'support@maxcreet.com', name: 'Maxcreet'))

或动态:email.from = SendGrid::Email.new(email: mail[:from].addrs.first.address, name: mail[:from].addrs.first.name))

如果您的mail对象可以识别该密钥。

否则,您需要查看mail gem的文档,以了解如何从该mail[:from].addrs对象提取友好名称/显示名称。