2009-07-29 77 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使用相同的值,但此腳本引發無效的地址錯誤。

有人可以幫我嗎?

編輯:上面的代碼現在工作正常,我最初在最後的方法調用中省略了逗號。我覺得自己像個白癡。

回答

1

你能相信嗎?我覺得自己像個白癡,我只是缺少逗號在方法調用...

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

我很尷尬。

無論如何,如果任何人有興趣,上面的代碼很好用。只是不要像我一樣忽略逗號。

1

確保您的實際電子郵件地址不包含無效字符。例如,請參閱this question

+0

謝謝,但我的機器名稱和我的電子郵件地址是完全有效的,沒有奇怪的字符,沒有前導或尾隨的空白或點。雖然我的機器名稱有一個破折號,但更改我的計算機名稱是一件麻煩事,因爲我在公司網絡中。短跑會成爲問題嗎?請記住,telnet的作品! – 2009-07-29 15:06:09

+0

短劃線應該沒問題,但下劃線對域無效。您可能需要查看SMTP流量才能查看服務器實際正在查看的內容 - 可能不是您認爲它所看到的內容。 – 2009-07-29 15:35:20

1

我建議Action Mailer用Ruby發送郵件。查看片段here

+0

我寧願使用Net :: SMTP ...我不需要所有的爵士樂。使用任何不在紅寶石核心的東西是我最後的手段(例如Action Mailer或TMail或類似的) – 2009-07-29 15:25:18

1

代碼中存在一個錯誤。惡意用戶可以通過在主題中使用換行符在您的電子郵件中插入更多標題。