스크립트 사용을 위해 Gmail / Google Apps를 SMTP 서버로 사용할 수는 있지만 너무 많은 이메일이 전송되면 오류 메시지가 표시됩니다.
SMTP Error: 454 4.7.0 Too many login attempts, please try again later.
보통 한두 시간 정도 기다렸다가 다시 100 개의 이메일을 보낼 수는 있지만 곧 같은 오류 메시지가 다시 나타납니다.
답변
문제는 도메인에 SPF 레코드를 설정했지만 도메인과 관련된 DKIM 레코드가 없다는 것입니다. Google Apps에 DKIM 레코드를 추가하려면 다음을 수행해야합니다.
- 관리 콘솔로 이동
- “Google Apps”를 클릭하십시오
- “Gmail”을 클릭하십시오
- “이메일 인증”이 보일 때까지 아래로 스크롤하여 클릭하십시오.
- DKIM을 추가 할 도메인을 선택하십시오
- 사용할 접두사를 물으면 기본값 ‘google’을 사용하십시오.
그런 다음 TXT 레코드를 두 부분으로 볼 수 있습니다. 한 부분에는 도메인이 있고 다른 부분에는 실제 TXT 레코드가 있습니다. 도메인의 서버에서 DNS 설정으로 이동하여이 레코드를 추가해야합니다. DNS 제어판에서 도메인을 추가 할 수없는 google._domainkey
경우 도메인을 정규화 된 도메인으로 만드십시오 google._domainkey.example.com
.
이렇게 한 후 DNS 레코드를 전파 할 시간을 조금 준 다음 Google Apps 관리자 패널에서 “인증 시작”을 클릭하십시오. 녹색 확인 표시가 보이면 완료된 것이므로 전자 메일이 SMTP 서버를 통해 다시 시작됩니다.
답변
보내야 할 각 이메일에 대해 인증하지 않아야합니다.
프로세스 시작시 :
Session session = loadSession();
Transport transport = session.getTransport("smtp");
transport.connect("example@gmail.com", "password");
그런 다음 전송 세션을 사용하여 세션을 시작하지 않고 각 메일을 보내십시오.
transport.sendMessage(message, message.getAllRecipients());
모든 이메일을 보낸 후 연결을 닫아야합니다.
transport.close();
답변
@ 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
답변
대량 이메일을 보낼 때 SMTP를 사용하면 모든 단일 메일로 로그인 한 다음 로그 아웃합니다. 그 때문에 Google은 연결을 차단합니다. 나를 위해 일한 것은 SMTPKeepAlive를 true로 설정하는 것입니다.