我正在尝试使用mail gem发送电子邮件。但遗憾的是它不起作用。 这是我的控制者。
def create
fn = params["firstname"]
ln = params["lastname"]
email = params["email"]
file = params["file"]
summery = params["summery"]
email_body = "Hello\n This is Your favorite website.\nA I want to personaly say hi."
mail = Mail.new do
from 'someone@gmail.com'
to email
subject "Saying Hi"
body email_body
end
mail.add_file(filename: file.original_filename, content: File.read(file.tempfile.path)) unless file.nil?
mail.deliver!
render json: {message: "A bug has been created", success: true}, status: 201
end
此代码产生此错误
Errno :: ECONNREFUSED - 拒绝连接 - 连接(2)“localhost”端口25:
但是,当我安装mailcatcher并配置我的控制器将邮件发送到mailcatcher时,我可以在mailcatcher UI中看到该电子邮件。
Mail.defaults do
delivery_method :smtp, address: "localhost", port: 1025
end
此外,我已将这两行添加到我的config / environment / development.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
从我的搜索中我看到有些人提到不要在开发模式下发送电子邮件,但是在这种情况下我真的想测试完整的功能。
更新
由于@Uzbekjon和@SimoneCarletti建议我更改我的代码以使用ActionMailer。我在app / mailer /中创建了一个文件,我从我的控制器中调用它。
def create
fn = params["firstname"]
ln = params["lastname"]
email = params["email"]
file = params["file"]
summery = params["summery"]
email_body = "Hello\n This is Your favorite website.\nA I want to personaly say hi."
WelcomeMailer.welcome(fn, ln, email, file, email_body).deliver_now
render json: {message: "An Email has been send", success: true}, status: 201
end
这是我的邮件
class WelcomeMailer < ActionMailer::Base
default from: "someone@yahoo.com"
def welcome(first_name, last_name, email, file, email_body)
attachments["#{file.original_filename}"] = File.read("#{file.tempfile.path}")
mail(
to: email,
subject: 'Welcome to My Awesome Site',
body: email_body
)
end
end
但是我仍然遇到同样的错误。
Errno :: ECONNREFUSED - 拒绝连接 - 连接(2)“localhost”端口25:
答案
所以我找到了解决方案。是的,您需要使用ActionMailer。之后,您需要转到 config / environments / development.rb ,并修改并添加以下行:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
# SMTP settings for gmail
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => "YOUR EMAIL",
:password => "YOUR Password",
:authentication => "plain",
:enable_starttls_auto => true
}
此外,如果Gmail抱怨这个:
Net :: SMTPAuthenticationError - 534-5.7.9需要特定于应用程序的密码
转到此link,让安全性较低的应用程序访问Gmail。
其他配置可用于Yahoo等其他服务。只是Google吧。
答案 0 :(得分:1)
Errno :: ECONNREFUSED - 拒绝连接 - 连接(2)“localhost”端口25:
看起来mail
gem正在尝试连接到端口25上的本地smtp服务器。很可能您没有在端口25上运行和接收连接的服务。
在您的计算机上解决,安装并运行sendmail
或postfix
。
PS。使用ActionMailer
。
答案 1 :(得分:0)
您没有在端口25上运行邮件服务器。您可以安装postfix并使用
启动服务器sudo postfix start
然后修改config/environments/development.rb
config.action_mailer.delivery_method = :sendmail
希望这有帮助。