Я пытаюсь отправить электронное письмо с помощью скрипта Ruby, но мое доказательство концепции не работает. Я могу подключиться к почтовому серверу по telnet и таким образом отправлять почту, но этот сценарий заставляет почтовый сервер генерировать ошибку: 501 5.5.4 Invalid Address

#!/usr/bin/ruby

require 'net/smtp'

def send_email(to, subject = "", body = "")
    from = "my@email.com"
    body= "From: #{from}\r\nTo: #{to}\r\nSubject: #{subject}\r\n\r\n#{body}\r\n"

    Net::SMTP.start('192.168.10.213', 25, '192.168.0.218') do |smtp|
        smtp.send_message body, from, to
    end
end

send_email "my@email.com", "test", "blah blah blah"

В моем реальном сценарии my@email.com - действительный адрес электронной почты. 192.168.10.213 - это почтовый сервер, а 192.168.0.218 - мой локальный IP-адрес. Обратите внимание, что я использую windows xp, а почтовый сервер является сервером обмена.

Я не понимаю, почему telnet работает с теми же значениями, но этот сценарий вызывает ошибку неверного адреса.

Кто-нибудь может мне помочь?

ИЗМЕНИТЬ : приведенный выше код теперь работает нормально, я изначально не использовал запятые в последнем вызове метода. Я чувствую себя идиотом.

4
Peter Di Cecco 29 Июл 2009 в 18:55

4 ответа

Лучший ответ

Ты можешь в это поверить? Чувствую себя идиотом, мне просто не хватает запятых в вызове метода ...

send_email "my@email.com", "test", "blah blah blah"

Я смущен.

В любом случае, приведенный выше код отлично работает, если кому-то интересно. Только не опускайте запятые, как я.

1
Peter Di Cecco 29 Июл 2009 в 21:06

В вашем коде есть ошибка. Злоумышленник может вставить в ваше электронное письмо больше заголовков, используя в теме сообщения новые строки.

1
andrewrk 5 Авг 2010 в 03:43

Я бы порекомендовал Action Mailer для отправки писем с помощью Ruby. См. Фрагмент здесь.

1
kgiannakakis 29 Июл 2009 в 15:03

Убедитесь, что ваш реальный адрес электронной почты не содержит недопустимых символов. Например, см. этот вопрос.

1
Community 23 Май 2017 в 12:26