Я пытаюсь отправить простую электронную почту через Ruby (без рельсов) на OS X, с XCode (который устанавливает Ruby.) Но у меня проблема с моим smtp-сервером, который требует по электронной почте клиент для проверки почты перед отправкой в качестве формы проверки подлинности.Ruby отправить почту с smtp
Как я могу получить Ruby для аутентификации с SMTP-сервером в режиме «POP», прежде чем я могу отправить почту? Не загружать почту; Я только хочу отправить html-форматированную электронную почту (в конечном счете через Applescript, вызывая Ruby, потому что Applescript не поддерживает smtp), но сервер требует, чтобы я проверял почту до отправки.
Редактировать 4/05/10:
Ну, это неловко. Оказалось, что это проще; Я пытался сделать его более сложным, чем нужно. Даже если мой почтовый сервер требует POP перед SMTP, это посылает OK:
require 'net/smtp'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: SMTP e-mail test
This is a test e-mail message.
MESSAGE_END
Net::SMTP.start('mail.mydomain.com', 25) do |smtp|
smtp.send_message message,
'[email protected]',
'[email protected]'
end
Редактировать 4/04/10:
С этим я получаю неопознанная ошибка команды 500; тем не менее, поп-сервер отвечает.
require 'net/smtp'
require 'net/pop'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: SMTP e-mail test
This is a test e-mail message.
MESSAGE_END
Net::POP3.start('mail.mydomain.com', 110, '[email protected]', 'password') do |pop|
// If this line is included,
// I get a printout of the number
// of emails on the server
// right before the error:
//
// puts pop.n_mails end
Net::SMTP.start('mail.markratledge.com',
25,
'localhost',
'[email protected]', 'password', :plain) do |smtp|
smtp.send_message message, '[email protected]mydomain.com',
'[email protected]'
end
end
Зачем вам нужен поп-чек, если pop на сервере smtp недоступен? –
Моя ошибка; Я хотел сказать, что это безопасный поп .... – markratledge
Я подозреваю, что причина ошибки 500 при выполнении 'pop.finish' заключается в том, что если вы передадите блок в' POP3.start', как вы делаете выше, то соединение будет автоматически закрывается для вас в конце блока, поэтому, добавив 'pop.close', вы пытаетесь закрыть соединение дважды. – mikej