Я обнаружил, что, хотя Gmail / Google Apps можно было использовать в качестве SMTP-сервера для использования по сценарию, при отправке слишком большого количества писем я начинал получать сообщения об ошибках:
SMTP Error: 454 4.7.0 Too many login attempts, please try again later.
Обычно, если я ждал час или два, я мог отправить еще 100 писем или около того, но вскоре я снова сталкивался с тем же сообщением об ошибке.
Я обнаружил, что проблема заключалась в том, что, хотя у нас были настроены записи SPF для наших доменов, у нас не было записи DKIM, связанной с нашим доменом. Чтобы добавить запись DKIM в Google Apps, вам необходимо сделать следующее:
Затем вы увидите запись 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.