Rails + SendGrid不允许未经身份验证的发送者



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

我有:

在一封邮件中。

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

This much works;我收到了邮件,就这样了。

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

在同一个UserMailer类中:

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

使用相同的函数(尽管这次是在worker之外,这样我可以轻松调试):

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。

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

解决方案非常简单,所以对于那些发现这个线程并需要帮助的人,我至少会发布我所做的。

在发展。我做了以下操作来查看抛出的错误:

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不输出nil…

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

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

foreman run bundle exec rake namespace:task

相关内容

  • 没有找到相关文章

最新更新