535-5.7.8不接受用户名和密码

时间:2014-04-17 15:16:53

标签: ruby-on-rails

我有联系表单,提交后我收到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" }

9 个答案:

答案 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个因素 身份验证。

enter image description here

如果您禁用了两步验证:

  • 在浏览器中打开您的Gmail帐户
  • 导航到Less secure app access
  • 制作允许安全性较低的应用 => 打开

enter image description here

答案 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而不是true
public 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
  }