2

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

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

4

2 回答 2

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

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

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

于 2013-01-04T09:58:25.060 回答
1

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

foreman run bundle exec rake namespace:task
于 2013-12-17T09:00:46.213 回答