在我的培训期间,我正在网站上工作,我们使用Ruby on Rails。我们需要向用户发送邮件,因此我创建了一个邮件程序。
我试图将smtp放在development.rb
和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:拒绝连接 - 连接(2)for" localhost" 25号港口
看起来好像另一个文件覆盖了我的设置。我还看到它可能与我的ssh密钥没有被服务器授权有关。
知道出了什么问题吗?
提前致谢
答案 0 :(得分:12)
首先,在localhost上进行开发时,不实际发送邮件是常见的,而是将其视为部署细节并坚持使用Rails默认行为来发送邮件标题和内容进入控制台STDOUT(您可以在其中验证文本是否正确)。是否有特定原因需要在开发环境中测试发送消息?
其次,您提到在development.rb和environment.rb中设置了SMTP设置。您不需要两次设置这些设置;一般情况下,我将development.rb
用于特定于开发环境的设置,environment.rb
仅用于将始终应用于所有环境(开发,测试和实时部署的服务器)的设置。因此,如果您在development.rb和environment.rb中设置相同的设置,我首先要删除其中一个;冗余只会让你的工作更加艰难。
最后,要解决这个问题,我首先要问Rails它的设置是什么,而不是等待邮件传递失败。请尝试以下方法:
rails console
Rails.configuration.action_mailer.smtp_settings
并将结果哈希与您的期望进行比较。此哈希应包含发送所有邮件时使用的端口和域设置(在当前环境中),因此如果ActionMailer尝试错误的端口,那么我也希望端口在这里也是错误的。您在哪里设置$SMTP_SERVER
,$PORT
和$MAIL
?您是否有任何理由不将Rails的约定用于环境变量ENV['SMTP_SERVER']
等?
希望其中一些有帮助。祝你好运!
答案 1 :(得分:5)
替换
config.action_mailer.delivery_method = 'smtp'
与
config.action_mailer.delivery_method = :smtp
确保您的Rails.configuration.action_mailer.smtp_settings是符号化键
答案 2 :(得分:1)
我在开发自己的应用程序时遇到了同样的错误消息。我发现的是,由于我实际上没有在开发环境中发送任何电子邮件,因此需要更改位于/your_apps_name/config/environments/development.rb
来自
config.action_mailer.raise_delivery_errors = true
到
config.action_mailer.raise_delivery_errors = false
这导致我的应用程序在电子邮件未成功发送时引发错误,并且我实际上没有发送电子邮件,因此当然电子邮件未成功发送。
答案 3 :(得分:0)
该应用可能正在将mailcatcher
gem用于开发中的所有未安装或未运行的所有出站电子邮件。至少那是我的问题。检出https://mailcatcher.me,然后按照给出的说明进行操作。
答案 4 :(得分:0)
对于像我这样笨手笨脚的人,当我在我的应用程序中完美设置所有内容时,我收到了这条消息,但我只是忘记运行在我的生产环境中添加邮件插件的命令。就我而言,该行是 SHA
。我希望这可以帮助其他人。
答案 5 :(得分:-1)
您需要删除config.action_mailer.perform_deliveries = true
行。