Lỗi Google SMTP: 454 4.7.0 Quá nhiều lần thử đăng nhập, vui lòng thử lại sau


17

Tôi phát hiện ra rằng mặc dù có thể sử dụng Gmail / Google Apps làm máy chủ SMTP để sử dụng theo kịch bản, nhưng nếu có quá nhiều email được gửi, tôi bắt đầu nhận được thông báo lỗi:

SMTP Error: 454 4.7.0 Too many login attempts, please try again later.

Thông thường nếu tôi đợi một hoặc hai giờ tôi có thể gửi thêm 100 email nữa, nhưng tôi sẽ sớm gặp lại thông báo lỗi tương tự.

Câu trả lời:


12

Tôi phát hiện ra rằng vấn đề là mặc dù chúng tôi đã thiết lập các bản ghi SPF cho tên miền của mình nhưng chúng tôi không có bản ghi DKIM được liên kết với tên miền của chúng tôi. Để thêm bản ghi DKIM trong Google Apps, bạn cần làm như sau:

  • Chuyển đến Bảng điều khiển dành cho quản trị viên
  • Nhấp vào "Ứng dụng Google"
  • Nhấp vào "Gmail"
  • Cuộn xuống cho đến khi bạn thấy "Email xác thực" và nhấp vào đó
  • Chọn tên miền bạn muốn thêm DKIM vào
  • Khi nó hỏi bạn muốn sử dụng tiền tố nào, chỉ cần sử dụng mặc định của 'google'

Sau đó, bạn sẽ thấy một bản ghi TXT thành hai phần, một phần có tên miền và phần còn lại có bản ghi TXT thực tế. Bạn cần truy cập cài đặt DNS trên máy chủ cho tên miền của mình và thêm bản ghi này. Nếu bảng điều khiển DNS của bạn không cho phép bạn thêm tên miền google._domainkey, chỉ cần làm cho tên miền đủ điều kiện như thế google._domainkey.example.com.

Sau khi bạn thực hiện việc này, hãy cung cấp cho bản ghi DNS một chút thời gian để truyền bá và sau đó nhấp vào "Bắt đầu xác thực" trong bảng quản trị Google Apps. Nếu bạn thấy dấu kiểm màu xanh lục, bạn đã hoàn thành và email sẽ bắt đầu chảy qua máy chủ SMTP một lần nữa.


Nếu bạn không kiểm soát máy chủ DNS thì sao?
Ishmael

1
Một phao cứu sinh. Dường như gmail sẽ kiểm tra các máy chủ có thẩm quyền để tìm bản ghi TXT, do đó bạn không cần phải chờ bản quyền DNS đầy đủ - đối với hầu hết các thay đổi được thực hiện trong những ngày này thông qua trình quản lý tệp DNS, bạn sẽ không phải chờ nhiều hơn giây để thay đổi có hiệu lực.
JT Taylor

4

Bạn không được xác thực cho mỗi email bạn nên gửi.

Khi bắt đầu quá trình:

Session session = loadSession();
Transport transport = session.getTransport("smtp");
transport.connect("example@gmail.com", "password");

Sau đó, sử dụng đối tượng vận chuyển để gửi từng thư mà không bắt đầu phiên:

transport.sendMessage(message, message.getAllRecipients());

Sau khi bạn gửi tất cả các email, bạn nên đóng kết nối:

transport.close();

0

giải pháp từ @ victorpacheco3107 đã làm việc cho tôi, đây là những gì tôi đã làm trong ruby:

settings = {
  address:        "smtp.gmail.com",
  port:           587,
  domain:         "mydomain.com",
  user_name:      "user@mydomain.com",
  password:       "password",
  authentication: "plain"
}

smtp_conn = Net::SMTP.new(settings[:address], settings[:port])
smtp_conn.enable_starttls_auto
smtp_conn = smtp_conn.start(settings[:domain],
                            settings[:user_name],
                            settings[:password],
                            settings[:authentication])
Mail.defaults do
  delivery_method :smtp_connection, { :connection => smtp_conn }
end

# send mails..
mail = Mail.new
mail.to('...')
# more mail stuff..
mail.deliver!

# after all mails are sent, end session
smtp_conn.finish

0

Sử dụng SMTP khi bạn gửi email hàng loạt, nó đăng nhập với mỗi thư và sau đó đăng xuất. Bởi vì điều đó làm cho kết nối của bạn bị chặn. Điều làm việc cho tôi là đặt SMTPKeepAlive thành true.


1
Nó đã được đề nghị không đăng nhập cho mỗi thư.
RalfFriedl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.