2010-04-03 57 views
1

我想通過Ruby(無軌)在OS X上發送簡單的電子郵件,用XCode(它安裝Ruby。)但我遇到了我的smtp服務器的問題,它需要電子郵件客戶端在發送之前檢查郵件作爲身份驗證的一種形式。紅寶石用smtp發送郵件

在我可以發送郵件之前,如何讓Ruby以「POP」方式驗證smtp服務器?不下載郵件;我只想發送HTML格式的電子郵件(最終通過調用Ruby的Applescript,因爲Applescript不支持smtp),但服務器要求在發送之前檢查郵件。

編輯10年4月5日:

嗯,這是尷尬。原來簡單些,我試圖讓它比需要的更復雜。雖然我的郵件服務器的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 

編輯10年4月4日:

有了這個,我得到一個500無法識別的命令錯誤;雖然pop服務器正在響應。

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]', 
          '[email protected]' 
end 
end 
+0

如果smtp服務器上沒有彈出窗口,您爲什麼需要彈出檢查? – 2010-04-03 04:22:29

+0

我的錯誤;我的意思是說安全的流行...... – markratledge 2010-04-03 17:48:32

+0

我懷疑當執行'pop.finish'時出現500錯誤的原因是,如果你在上面做的時候將一個塊傳遞給'POP3.start',那麼連接會自動在塊的末尾關閉你,所以通過放入一個'pop.close'你試圖關閉連接兩次。 – mikej 2010-04-04 22:47:21

回答

2

POP before SMTP是不Net::SMTP支持,所以我想你將不得不使用Net::POP3到例如做你的POP3登錄身份驗證類型之一

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

Net::POP3是標準庫中,以便應提供任何地方,Net::SMTP是。

+0

靠近。通過上面的代碼,我得到了一個彈出服務器準備好的200個回覆代碼。 (顯然我只是在學習Ruby ...) – markratledge 2010-04-03 17:52:45

+0

'start'應該連接到服務器並登錄。嘗試在'POP3.start'之後插入一個'puts pop.n_mails' - 這會打印出數量郵件信箱中的郵件作爲您確定與POP服務器交談的診斷信息。在進行SMTP連接之前,請嘗試執行'pop.finish'。如果您真的嘗試**通過SMTP發送郵件,現在會發生什麼? – mikej 2010-04-03 18:32:55

+0

移動pop.finish沒有運氣;仍然是500錯誤。沒有首先檢查電子郵件,仍然無法通過SMTP發送。但我可以用上面的代碼片斷登錄到pop服務器。 – markratledge 2010-04-04 22:01:56

1

如果這樣不能讓你的服務器開心,那麼Net :: Telnet會讓你自己發送原始命令。

+0

我沒有telnet訪問我的服務器;只有ssh。 – markratledge 2010-04-04 22:02:20

+0

如果您在適當的端口號上打開Telnet連接(POP爲110,SMTP爲25),則可以發送原始命令。 – mikej 2010-04-04 23:35:42

+0

我再次檢查,你都是對的;我確實有遠程訪問。我認爲從這個共享主機上禁用了過去的telnet。最後,爲了發送HTML格式的電子郵件,將從Applescript調用Ruby腳本,所以telnet可以方便地測試pop服務器,但telnet可以接收html格式的電子郵件嗎? – markratledge 2010-04-05 03:50:05