在培训期间,我正在开发一个网站,我们使用 Ruby on Rails。我们需要向用户发送邮件,所以我创建了一个邮件程序。
我尝试过将 smtp 放在两者中development.rb
and environment.rb
config.action_mailer.default_url_options = {host: '0.0.0.0:3000'}
config.action_mailer.default charset: 'utf-8'
config.action_mailer.delivery_method = 'smtp'
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
adress: $SMTP_SERVER,
port: $PORT,
from: $MAIL,
enable_starttls_auto: true
#authentication: 'login'
}
它告诉我错误来自该方法第 6 行
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
# Tell the UserMailer to send a welcome Email after save
UserMailer.welcome_email(@user).deliver_now
format.html { redirect_to(@user, :notice => 'User was successfully created.') }
format.json { render :json => @user, :status => :created, :location => @user }
else
format.html { render :action => "new" }
format.json { render :json => @user.errors, :status => :unprocessable_entity }
end
end
end
我已将端口设置为587
但我不断收到错误:
Errno::ECONNREFUSED:连接被拒绝 - “localhost”的 connect(2)
端口25
看起来好像另一个文件正在覆盖我的设置。我还发现这可能与我的 ssh 密钥未经服务器授权有关。
知道出了什么问题吗?
提前致谢
首先,在本地主机上开发时,很常见not实际上发送邮件,而不是将其视为部署细节并坚持 Rails 默认行为,即将邮件标头和内容吐出到控制台 STDOUT(您可以在其中验证文本看起来是否正确)。您需要在开发环境中测试发送消息是否有特定原因?
其次,您提到您在development.rb 和environment.rb 中设置了SMTP 设置。您不需要两次设置这些设置;一般来说我会用development.rb
对于特定于开发环境的设置,以及environment.rb
仅适用于始终适用于所有环境(开发、测试和实时部署的服务器)的设置。因此,如果您在development.rb和environment.rb中设置相同的设置,我会首先删除其中一个;裁员只会让你以后的工作变得更加困难。
最后,为了解决这个问题,我首先询问 Rails 的设置是什么,而不是等待邮件传递失败。请尝试以下操作:
- 启动
rails console
- Enter
Rails.configuration.action_mailer.smtp_settings
并将生成的哈希值与您的期望进行比较。这个哈希应该包含发送所有邮件时使用的端口和域设置(在当前环境中),因此如果 ActionMailer 尝试错误的端口,那么我预计这里的端口也是错误的。
你在哪里设置$SMTP_SERVER
, $PORT
and $MAIL
?你有什么理由不使用 Rails 的环境变量约定吗?ENV['SMTP_SERVER']
etc.?
希望其中一些有所帮助。祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)