2009-07-29 2 views
4

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

#!/usr/bin/ruby 

require 'net/smtp' 

def send_email(to, subject = "", body = "") 
    from = "[email protected]" 
    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 "[email protected]", "test", "blah blah blah" 

В моем фактическом сценарии, [email protected] действительный адрес электронной почты. 192.168.10.213 - это почтовый сервер, а 192.168.0.218 - это мой местный ip. Обратите внимание, что я запускаю windows xp, а почтовый сервер - сервер обмена.

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

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

EDIT: Приведенный выше код теперь работает нормально, я изначально отказался от запятых в конечном вызове метода. Я чувствую себя идиотом.

ответ

1

Вы можете в это поверить? Я чувствую себя идиотом, я просто недостающие запятые в вызове метода ...

send_email "[email protected]", "test", "blah blah blah"

Я смутился.

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

1

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

+0

Спасибо, но и мое имя машины, и мой адрес электронной почты абсолютно верны, не имеют никаких нечетных символов, не имеют ни пробела, ни пробега или пробелов. У моего машинного имени есть черта в нем, хотя ... это хлопот, чтобы изменить имя моего компьютера, поскольку я в корпоративной сети. Может ли проблема быть проблемой? Помните, telnet работает! –

+0

Черта должна быть хорошей, хотя подчеркивание недействительно для доменов. Возможно, вам придется посмотреть на SMTP-трафик, чтобы увидеть, что на самом деле видит сервер - возможно, это не так, как вы думаете. –

1

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

+0

Я бы предпочел использовать Net :: SMTP ... Мне не нужен весь этот джаз. Использование всего, что не в рубиновом ядре, является моим последним средством (например, Action Mailer или TMail или аналогичным) –

1

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

+0

Хороший улов. Этот код использовался только как сценарий локального запуска для одноразового пакетного задания, поэтому я не рассматривал такую ​​безопасность. Это все еще хороший момент, хотя для тех, кто может захотеть использовать этот код. Благодарю. –

Смежные вопросы