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 - 接続が拒否されました - 「localhost」ポート 25 の connect(2):
ただし、mailcatcherをインストールし、メールを mailcatcher に送信するようにコントローラーを構成すると、mailcatcher UI にメールが表示されます。
Mail.defaults do
delivery_method :smtp, address: "localhost", port: 1025
end
また、この 2 行を 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 - 接続が拒否されました - 「localhost」ポート 25 の connect(2):
答え
だから私は解決策を見つけました。はい、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 アプリケーション固有のパスワードが必要です
このリンクにアクセスして、安全性の低いアプリケーションに Gmail へのアクセスを許可します。
Yahoo などの他のサービスでは、他の構成を利用できます。グーグルで検索してください。