Net::SMTPAuthenticationError(需要 530-5.5.1 身份验证。了解更多信息,请访问):
Net::SMTPAuthenticationError (530-5.5.1 Authentication Required. Learn more at ):
我正在关注第 10 章的 Rails 教程。
由于我没有信用卡,我正在尝试发送开发中的电子邮件。我是编程新手,所以我只是想看看它是如何工作的。
但是,我遇到了这个错误。
Net::SMTPAuthenticationError (530-5.5.1 Authentication Required. Learn more at
):
app/models/user.rb:65:in `send_password_reset_email'
app/controllers/password_resets_controller.rb:13:in `create'
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_source.erb (5.3ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_trace.html.erb (2.6ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_request_and_response.html.erb (1.1ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_web_console.html.erb (0.9ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/diagnostics.html.erb within rescues/layout (30.9ms)
谁能告诉我我错过了什么?
development.rb
config.cache_classes = false
config.eager_load = false
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'mail.google.com',
:user_name => ENV['#I hardcoded it here'], # I put my my email which I used regularly here.
:password => ENV['#I hardcoded it here'], # I put the password here.
:authentication => 'plain',
:enable_starttls_auto => true
}
config.active_support.deprecation = :log
config.active_record.migration_error = :page_load
config.assets.debug = true
config.assets.digest = true
config.assets.raise_runtime_errors = true
user_mailer.rb
class UserMailer < ApplicationMailer
def account_activation(user)
@user = user
mail to: user.email, subject: "Account activation"
end
def password_reset(user)
@user = user
mail to: user.email, subject: "Password reset"
end
end
application_mailer.rb
class ApplicationMailer < ActionMailer::Base
#default from: "from@example.com"
default from: "xxxxxx@gmail.com" # I put my my email which I used regularly here.
layout 'mailer'
end
password_reset_controller.rb
class PasswordResetsController < ApplicationController
before_action :get_user, only: [:edit, :update]
before_action :valid_user, only: [:edit, :update]
before_action :check_expiration, only: [:edit, :update]
def new
end
def create
@user = User.find_by(email: params[:password_reset][:email].downcase)
if @user
@user.create_reset_digest
@user.send_password_reset_email
flash[:info] = "Email sent with password reset instructions"
redirect_to root_url
else
flash.now[:danger] = "Email address not found"
render 'new'
end
end
def edit
end
def update
if params[:user][:password].empty?
@user.errors.add(:password, "can't be empty")
render 'edit'
elsif @user.update_attributes(user_params)
log_in @user
flash[:success] = "Password has been reset."
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:password, :password_confirmation)
end
def get_user
@user = User.find_by(email: params[:email])
end
# Confirms a valid user.
def valid_user
unless (@user && @user.activated? && @user.authenticated?(:reset, params[:id]))
redirect_to root_url
end
end
# Checks expiration of reset token.
def check_expiration
if @user.password_reset_expired?
flash[:danger] = "Password reset has expired."
redirect_to new_password_reset_url
end
end
end
我想建议你跟进
一定会帮助你
编辑更新
Allow less secure apps to access accounts
Google may block sign-in attempts from some apps or devices that do
not use modern security standards. Since these apps and devices are
easier to break into, blocking them helps keep your account safe.
Some examples of apps that do not support the latest security
standards include:
The Mail app on your iPhone or iPad with iOS 6 or below The Mail app
on your Windows phone preceding the 8.1 release Some Desktop mail
clients like Microsoft Outlook and Mozilla Thunderbird
希望你不要在环境变量中设置用户名和密码ENV
而是写成ENV["the actual user name"]
所以它没有通过。
如果您想通过 gmail 发送,请尝试 gmail.com
您可以使用
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => "test@gmail.com" #your gmail id
:password => "1234" #your gmail password
:authentication => :plain,
:enable_starttls_auto => true
}
或者如果你想在 env
中设置密码
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: "gmail.com",
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}
If you’re familiar with Unix, you’ve likely had experience setting
environment variables. Unix environment variables are typically set in
a file that is read when starting an interactive shell (the ~/.bashrc
file for the bash shell).
For a bash
shell, edit the ~/.bashrc file and add:
export GMAIL_USERNAME="myname@gmail.com"
export GMAIL_PASSWORD="mypassword"
我正在关注第 10 章的 Rails 教程。 由于我没有信用卡,我正在尝试发送开发中的电子邮件。我是编程新手,所以我只是想看看它是如何工作的。
但是,我遇到了这个错误。
Net::SMTPAuthenticationError (530-5.5.1 Authentication Required. Learn more at
):
app/models/user.rb:65:in `send_password_reset_email'
app/controllers/password_resets_controller.rb:13:in `create'
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_source.erb (5.3ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_trace.html.erb (2.6ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_request_and_response.html.erb (1.1ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_web_console.html.erb (0.9ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/diagnostics.html.erb within rescues/layout (30.9ms)
谁能告诉我我错过了什么?
development.rb
config.cache_classes = false
config.eager_load = false
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'mail.google.com',
:user_name => ENV['#I hardcoded it here'], # I put my my email which I used regularly here.
:password => ENV['#I hardcoded it here'], # I put the password here.
:authentication => 'plain',
:enable_starttls_auto => true
}
config.active_support.deprecation = :log
config.active_record.migration_error = :page_load
config.assets.debug = true
config.assets.digest = true
config.assets.raise_runtime_errors = true
user_mailer.rb
class UserMailer < ApplicationMailer
def account_activation(user)
@user = user
mail to: user.email, subject: "Account activation"
end
def password_reset(user)
@user = user
mail to: user.email, subject: "Password reset"
end
end
application_mailer.rb
class ApplicationMailer < ActionMailer::Base
#default from: "from@example.com"
default from: "xxxxxx@gmail.com" # I put my my email which I used regularly here.
layout 'mailer'
end
password_reset_controller.rb
class PasswordResetsController < ApplicationController
before_action :get_user, only: [:edit, :update]
before_action :valid_user, only: [:edit, :update]
before_action :check_expiration, only: [:edit, :update]
def new
end
def create
@user = User.find_by(email: params[:password_reset][:email].downcase)
if @user
@user.create_reset_digest
@user.send_password_reset_email
flash[:info] = "Email sent with password reset instructions"
redirect_to root_url
else
flash.now[:danger] = "Email address not found"
render 'new'
end
end
def edit
end
def update
if params[:user][:password].empty?
@user.errors.add(:password, "can't be empty")
render 'edit'
elsif @user.update_attributes(user_params)
log_in @user
flash[:success] = "Password has been reset."
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:password, :password_confirmation)
end
def get_user
@user = User.find_by(email: params[:email])
end
# Confirms a valid user.
def valid_user
unless (@user && @user.activated? && @user.authenticated?(:reset, params[:id]))
redirect_to root_url
end
end
# Checks expiration of reset token.
def check_expiration
if @user.password_reset_expired?
flash[:danger] = "Password reset has expired."
redirect_to new_password_reset_url
end
end
end
我想建议你跟进
一定会帮助你
编辑更新
Allow less secure apps to access accounts
Google may block sign-in attempts from some apps or devices that do not use modern security standards. Since these apps and devices are easier to break into, blocking them helps keep your account safe.
Some examples of apps that do not support the latest security standards include:
The Mail app on your iPhone or iPad with iOS 6 or below The Mail app
on your Windows phone preceding the 8.1 release Some Desktop mail
clients like Microsoft Outlook and Mozilla Thunderbird
希望你不要在环境变量中设置用户名和密码ENV
而是写成ENV["the actual user name"]
所以它没有通过。
如果您想通过 gmail 发送,请尝试 gmail.com
您可以使用
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => "test@gmail.com" #your gmail id
:password => "1234" #your gmail password
:authentication => :plain,
:enable_starttls_auto => true
}
或者如果你想在 env
中设置密码config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: "gmail.com",
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}
If you’re familiar with Unix, you’ve likely had experience setting environment variables. Unix environment variables are typically set in a file that is read when starting an interactive shell (the ~/.bashrc file for the bash shell).
For a bash shell, edit the ~/.bashrc file and add:
export GMAIL_USERNAME="myname@gmail.com"
export GMAIL_PASSWORD="mypassword"