【问题标题】:Rails + SendGrid Unauthenticated senders not allowedRails + SendGrid 不允许未经身份验证的发件人
【发布时间】:2012-12-15 12:20:25
【问题描述】:

我目前正在通过 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

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

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

在相同的 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。

对于这个奇怪问题的任何帮助将不胜感激。

【问题讨论】:

  • 很高兴您解决了这个问题。如果您将更新转换为下面的答案,这可能会有所帮助,以便人们可以更轻松地找到它们。
  • 我计划让 .env 工作后

标签: ruby-on-rails email sendgrid env


【解决方案1】:

解决方案最终非常简单,因此对于那些找到此线程并需要帮助的人,我至少会发布我所做的。

在 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 确实是 nil。仍在试图弄清楚为什么会这样,我仍然不确定欢迎电子邮件是如何发送的。

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

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

【讨论】:

    【解决方案2】:

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

    foreman run bundle exec rake namespace:task
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 2021-12-13
      • 1970-01-01
      • 2018-11-16
      • 2015-10-12
      相关资源
      最近更新 更多