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