Rails + SendGrid不允许使用未经身份验证的发件人

时间:2012-12-31 09:39:36

标签: ruby-on-rails email sendgrid env

我目前正致力于通过sendgrid发送电子邮件,目前正在向新用户发送电子邮件。 ...但奇怪的是,非常相似的电子邮件选项无效 - 包括收件人在内的完整电子邮件会显示在日志中,但从未收到过。

这就是我所拥有的:

在初始化程序中的mail.rb文件中:

ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.sendgrid.net',
  :port           => '587',
  :authentication => :plain,
  :user_name      => configatron.sendgrid.username,
  :password       => configatron.sendgrid.password,
  :domain         => 'heroku.com'
}

ActionMailer::Base.delivery_method = :smtp

在其他地方定义用户名和密码 - 确认它们具有正确的值

当新用户注册时,我会调用我的UserMailer类并执行以下操作:

def welcome_email(user)
    @email = user.email
    @name = user.full_name

    mail(to: @email, subject: "Welcome!")
end

工人通过简单地执行以下操作来调用它:

UserMailer.welcome_email(user).deliver

这很有用;我收到了电子邮件,就是这样。

但是当我尝试从不同的方法发送电子邮件时,神奇的事情就会崩溃。

在SAME UserMailer类中:

def request(org, recipient, item)
  @org = org
  @recipient = recipient
  @item = item

  mail(to: @org.email, subject: "A new request has been posted!")
end

使用SAME功能(虽然这次在工作人员之外,所以我可以轻松调试):

UserMailer.request(org, recipient, item).deliver

电子邮件完美地显示在终端中:

Sent mail to mypersonalemail@test.com (4717ms)
Date: Mon, 31 Dec 2012 01:03:35 -0800
From: mysendingemail@test.com
To: mypersonalemail@test.com
Message-ID: <[longhexstring]@localhost.localdomain.mail>
Subject: A new request has been posted!
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_50e154e769903_3c41bba7ec576d5";
charset=UTF-8
Content-Transfer-Encoding: 7bit



----==_mimepart_50e154e769903_3c41bba7ec576d5
Date: Mon, 31 Dec 2012 01:03:35 -0800
Mime-Version: 1.0
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-ID: <[longhex]@localhost.localdomain.mail>

Hello world!

----==_mimepart_50e154e769903_3c41bba7ec576d5
Date: Mon, 31 Dec 2012 01:03:35 -0800
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-ID: <[longhex]@localhost.localdomain.
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head>
  <body>
    <p>
Hello world!
    </p>
  </body>
</html>

但是,我在我的个人电子邮件,垃圾邮件,垃圾箱上检查我的收件箱,什么也没收到。甚至sendgrid都没有我要求发送请求电子邮件的日志!但欢迎的电子邮件工作得很好,甚至通过sendgrid记录。我不知道什么可能导致一组电子邮件发送而不是另一组,这真是令人费解。语法中没有明显的错误跳出来,我使用的值是正确的数据类型而不是nil。

对这个奇怪问题的任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:2)

解决方案最终非常简单,所以对于那些找到这个帖子并需要帮助的人,我至少会发布我所做的事情。

在development.rb中,我执行了以下操作以查看引发的错误:

config.action_mailer.raise_delivery_errors = true

得到了这个消息:

Net::SMTPFatalError - 550 Cannot receive from specified address <mypersonalemail@test.com>: Unauthenticated senders not allowed

这很奇怪,因为我认为我已经通过我输入的信息进行了身份验证.env输出我的configatron.sendgrid.username肯定是零。仍然试图找出原因,我仍然不确定如何发送欢迎电子邮件。

果然,将我的smtp设置更改为用于身份验证的硬编码值就像魅力一样。现在的问题是如何让ENV不出来......

最终的解决方案就是我在错误的localhost上。我在端口3000使用rails的默认rails服务器,但是工头启动(不确定是否默认情况下,但在我的项目中)是使用端口5000而不是。

答案 1 :(得分:1)

通过rake运行代码时遇到了这个问题。问题是存储在我的.env中的SENDGRID_USERNAME和SENDGRID_PASSWORD环境变量没有通过rake自动加载。解决方案是通过领班来执行:

foreman run bundle exec rake namespace:task