我有联系表单,提交后我收到Net :: SMTPAuthenticationError 535-5.7.8 Username and Password not accepted
它指向联系人控制器ContactMailer.new_contact(@contact).deliver
我重新启动了服务器。我试过了https://accounts.google.com/DisplayUnlockCaptcha。
我正在发展中。
联系人控制器:
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:message])
if @contact.valid?
ContactMailer.new_contact(@contact).deliver
flash[:notice] = "Message sent! Thank you for contacting us."
redirect_to root_url
else
render :action => 'new'
end
end
end
Development.rb:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'username@gmail.com',
password: 'password',
authentication: 'plain',
enable_starttls_auto: true }
config.action_mailer.default_url_options = { :host => "localhost:3000" }
答案 0 :(得分:25)
我遇到了同样的问题。现在,在进行以下更改后,它的工作正常
https://www.google.com/settings/security/lesssecureapps
您应该将“对安全性较低的应用程序的访问权限”更改为“已启用”(已启用,我已更改为已禁用,而是已更改为已启用)。过了一会儿我就可以发电子邮件了。
答案 1 :(得分:10)
首先,您需要使用带有凭据的有效Gmail帐户。
其次,在我的应用程序中,我不使用TLS自动,请尝试不使用此行:
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'YOUR_USERNAME@gmail.com',
password: 'YOUR_PASSWORD',
authentication: 'plain'
# enable_starttls_auto: true
# ^ ^ remove this option ^ ^
}
答案 2 :(得分:2)
更新:
通知 :此设置不适用于启用了两步验证的帐户,这意味着您必须禁用2个因素 身份验证。
如果您禁用了两步验证:
答案 3 :(得分:1)
我做了所有事情,从访问http://www.google.com/accounts/DisplayUnlockCaptcha到设置2-fa并创建应用程序密码。唯一有效的方法是登录http://mail.google.com并从服务器本身发送电子邮件。
答案 4 :(得分:1)
转到config/initializers/setup_mail.rb
检查那里的配置是否与development.rb
文件中写的配置相匹配。它在两个文件中应如下所示:
config.action_mailer.smtp_settings = {
:address =>"smtp.gmabirdvision17@gmail.comil.com",
:port => 587,
:domain => "gmail.com",
:user_name => "PPPPPPPP@gmail.com",
:password => "********",
:authentication => 'plain',
:enable_starttls_auto => true,
:openssl_verify_mode => 'none'
}
这肯定会解决你的问题。
答案 5 :(得分:1)
就我而言,删除2要素身份验证可以解决我的问题。
答案 6 :(得分:0)
如果在打开less secure apps
后仍然无法解决问题。
可能导致此错误的另一个可能原因是您没有使用gmail帐户。
- : user_name => 'example@company.com' , # It can not be used since it is not a gmail address
+ : user_name => 'example@gmail.com' , # since it's a gmail address
请参阅here。
另外,请记住启用less secure apps
可能需要一些时间。我必须多次这样做(在它工作之前,每次我访问链接时都会显示它是off
)并等待一段时间直到它真的有效。
答案 7 :(得分:0)
在development.rb
中将raise_delivery_errors设置为false而不是truepublic class QSIntentService extends TileService{
private static final String SERVICE_STATUS_FLAG = "serviceStatus";
private static final String PREFERENCES_KEY = "com.google.android_quick_settings";
@Override
public void onClick() {
updateTile();
boolean isCurrentlyLocked = this.isLocked();
if (!isCurrentlyLocked) {
Resources resources = getApplication().getResources();
Tile tile = getQsTile();
String tileLabel = tile.getLabel().toString();
String tileState = (tile.getState() == Tile.STATE_ACTIVE) ?
resources.getString(R.string.service_active) :
resources.getString(R.string.service_inactive);
Intent intent = new Intent(getApplicationContext(),
ResultActivity.class);
intent.putExtra(ResultActivity.RESULT_ACTIVITY_NAME_KEY,
tileLabel);
intent.putExtra(ResultActivity.RESULT_ACTIVITY_INFO_KEY,
tileState);
startActivityAndCollapse(intent);
}
}
private void updateTile() {
Tile tile = this.getQsTile();
boolean isActive = getServiceStatus();
Icon newIcon;
String newLabel;
int newState;
if (isActive) {
newLabel = String.format(Locale.US,
"%s %s",
getString(R.string.tile_label),
getString(R.string.service_active));
newIcon = Icon.createWithResource(getApplicationContext(), ic_android_black_24dp);
newState = Tile.STATE_ACTIVE;
} else {
newLabel = String.format(Locale.US,
"%s %s",
getString(R.string.tile_label),
getString(R.string.service_inactive));
newIcon =
Icon.createWithResource(getApplicationContext(),
android.R.drawable.ic_dialog_alert);
newState = Tile.STATE_INACTIVE;
}
tile.setLabel(newLabel);
tile.setIcon(newIcon);
tile.setState(newState);
tile.updateTile();
}
private boolean getServiceStatus() {
SharedPreferences prefs =
getApplicationContext()
.getSharedPreferences(PREFERENCES_KEY,
MODE_PRIVATE);
boolean isActive = prefs.getBoolean(SERVICE_STATUS_FLAG, false);
isActive = !isActive;
prefs.edit().putBoolean(SERVICE_STATUS_FLAG, isActive).apply();
return isActive;
}
答案 8 :(得分:0)
时光飞逝,我没有启用less secured app
的方式是为特定应用程序设置密码
第一步:启用2FA
第二步:创建应用专用密码
在此之后,将 16位数字密码设置为设置,然后重新加载该应用即可,尽情享受吧!
config.action_mailer.smtp_settings = {
...
password: 'HERE', # <---
authentication: 'plain',
enable_starttls_auto: true
}