ข้อผิดพลาดของ Google SMTP: 454 4.7.0 มีการพยายามเข้าสู่ระบบมากเกินไปโปรดลองอีกครั้งในภายหลัง


17

ฉันค้นพบว่าในขณะที่เป็นไปได้ที่จะใช้ Gmail / Google Apps เป็นเซิร์ฟเวอร์ SMTP สำหรับการใช้สคริปต์หากมีการส่งอีเมลจำนวนมากเกินไปฉันเริ่มได้รับข้อความแสดงข้อผิดพลาด:

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

โดยปกติถ้าฉันรอหนึ่งหรือสองชั่วโมงฉันสามารถส่งอีเมลอีก 100 ฉบับหรือมากกว่านั้น แต่ในไม่ช้าฉันก็จะได้รับข้อความแสดงข้อผิดพลาดเดิมอีกครั้ง

คำตอบ:


12

ฉันค้นพบว่าปัญหาคือแม้ว่าเราจะมีการตั้งค่าระเบียน SPF สำหรับโดเมนของเรา แต่เราไม่มีบันทึก DKIM ที่เชื่อมโยงกับโดเมนของเรา ในการเพิ่มระเบียน DKIM ใน Google Apps คุณต้องทำสิ่งต่อไปนี้:

  • ไปที่คอนโซลผู้ดูแลระบบ
  • คลิกที่ "Google Apps"
  • คลิกที่ "Gmail"
  • เลื่อนลงจนกว่าคุณจะเห็น "รับรองความถูกต้องอีเมล" และคลิกที่
  • เลือกโดเมนที่คุณต้องการเพิ่ม DKIM
  • เมื่อถามถึงคำนำหน้าสิ่งที่คุณต้องการใช้เพียงใช้ค่าเริ่มต้นของ 'google'

จากนั้นคุณจะเห็นระเบียน TXT ในสองส่วนส่วนหนึ่งมีโดเมนและอีกส่วนหนึ่งมีระเบียน TXT จริง คุณต้องเข้าไปที่การตั้งค่า DNS ของคุณบนเซิร์ฟเวอร์สำหรับโดเมนของคุณและเพิ่มบันทึกนี้ หากแผงควบคุม DNS ของคุณไม่อนุญาตให้คุณสามารถเพิ่มประสิทธิภาพของเพียงแค่ทำให้โดเมนที่มีคุณสมบัติครบถ้วนเช่นgoogle._domainkeygoogle._domainkey.example.com

หลังจากทำเช่นนี้แล้วให้บันทึก DNS สักเล็กน้อยเพื่อเผยแพร่แล้วคลิก "เริ่มการรับรองความถูกต้อง" ในแผงการดูแลระบบของ Google Apps หากคุณเห็นเครื่องหมายถูกสีเขียวแสดงว่าคุณทำเสร็จแล้วและอีเมลควรเริ่มส่งผ่านเซิร์ฟเวอร์ SMTP อีกครั้ง


ถ้าคุณไม่สามารถควบคุมเซิร์ฟเวอร์ DNS ได้จะเป็นอย่างไร
Ishmael

1
ผู้ช่วยชีวิต ดูเหมือนว่า gmail จะตรวจสอบเซิร์ฟเวอร์ที่มีสิทธิ์สำหรับระเบียน TXT ดังนั้นคุณไม่ควรรอการเผยแพร่ DNS เต็มรูปแบบเพราะการเปลี่ยนแปลงส่วนใหญ่ทำให้วันนี้ผ่านตัวจัดการไฟล์โซน DNS คุณจะไม่ต้องรออีกสักครู่ วินาทีเพื่อให้การเปลี่ยนแปลงมีผล
JT Taylor

4

คุณต้องไม่รับรองความถูกต้องสำหรับแต่ละอีเมลที่คุณควรส่ง

ที่จุดเริ่มต้นของกระบวนการ:

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

หลังจากนั้นให้ใช้ออบเจ็กต์การขนส่งเพื่อส่งจดหมายแต่ละฉบับโดยไม่ต้องเริ่มเซสชัน

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

หลังจากที่คุณส่งอีเมลทั้งหมดคุณควรปิดการเชื่อมต่อ:

transport.close();

0

ทางออกจาก @ victorpacheco3107 ได้ผลกับฉันนี่คือสิ่งที่ฉันทำในทับทิม:

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

ใช้ SMTP เมื่อคุณส่งอีเมลจำนวนมากเข้าสู่ระบบด้วยทุกจดหมายเดียวแล้วออกจากระบบ เนื่องจาก googles นั้นบล็อกการเชื่อมต่อของคุณ สิ่งที่ใช้ได้ผลสำหรับฉันคือตั้งค่า SMTPKeepAlive ให้เป็นจริง


1
มีการแนะนำว่าอย่าลงชื่อเข้าใช้อีเมลแต่ละฉบับ
RalfFriedl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.