Ruby отправляй почту с smtp - PullRequest
1 голос
/ 03 апреля 2010

Я пытаюсь отправить простое электронное письмо через Ruby (без рельсов) в OS X, с XCode (который устанавливает Ruby). Но я сталкиваюсь с проблемой с моим сервером smtp, который требует, чтобы почтовый клиент проверял почту раньше отправка как форма аутентификации.

Как я могу заставить Ruby проходить проверку подлинности на SMTP-сервере "POP", прежде чем я смогу отправлять почту? Не скачивать почту; Я хочу отправлять только письма в формате html (в конечном итоге через Applescript, вызывающий Ruby, поскольку Applescript не поддерживает smtp), но сервер требует, чтобы я проверял почту перед отправкой.

Изменить 4/05/10:

Ну, это смущает. Оказалось проще; Я пытался сделать это более сложным, чем нужно. Хотя мой почтовый сервер требует всплывающее окно перед SMTP, это отправляет ОК:

require 'net/smtp'

message = <<MESSAGE_END
    From: Private Person <me@fromdomain.com>
    To: A Test User <test@todomain.com>
    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,
            'mark@mydomain.com',
            'mark@mydomain.com'
end

Редактировать 04.04.10:

При этом я получаю 500 нераспознанных ошибок команды; хотя поп-сервер отвечает.

require 'net/smtp'
require 'net/pop'

message = <<MESSAGE_END
From: Private Person <me@fromdomain.com>
To: A Test User <test@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
MESSAGE_END

Net::POP3.start('mail.mydomain.com', 110, 'mark@mydomain.com', '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', 
                'mark@mydomain.com', 'password', :plain) do |smtp|
  smtp.send_message message, 'mark@mydomain.com', 
                             'mark@mydomain.com'
end
end

Ответы [ 2 ]

2 голосов
/ 03 апреля 2010

POP перед SMTP не является одним из типов аутентификации, поддерживаемых Net::SMTP, поэтому я думаю, что вам придется использовать Net :: POP3 для выполнения POP3 Войти например

require 'net/pop'
pop = Net::POP3.start(addr, port, account, password)
pop.finish

Net::POP3 находится в стандартной библиотеке, поэтому должен быть доступен везде, где Net::SMTP.

1 голос
/ 04 апреля 2010

Если это не делает ваш сервер счастливым, то Net :: Telnet позволит вам отправлять необработанные команды самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...