2012-08-06 81 views
0

我使用此代碼使用Ruby和SMTP協議信封問題

smtp = Net::SMTP.new 'smtp.gmail.com', 587 
smtp.enable_starttls 
smtp.start('smtp.gmail.com', 'username', 'password', :login) 
msgstr = "From: Sender <[email protected]> 
     To: Receiver <[email protected]> 
     Subject: Spammers List 

      This is a test message" 
smtp.send_message(msgstr, '[email protected]', '[email protected]') 
smtp.finish 

發送電子郵件,但信封來together.There沒有和主題在接收mail.Everything來從這個部分本身就是這樣。 發件人收件人主題:垃圾郵件發送者列表

有人可以說我在代碼中有什麼錯誤?

+0

在RFC822中,標題中的縮進表示它是前一個標題行的延續。所以你的'msgstr'的​​值確實包含一個很長的'From:'標題,裏面包含了所有的東西,包裹在幾條物理線上。 – tripleee 2012-08-06 09:30:21

回答

3

我相信你有2個問題。 SMTP需要cr-lf換行符,並且標題不能包含前導空格。我不確定這一點,但我認爲最後一條消息行可能還需要以換行符結束。如果將內容構建爲...

msgstr = <<SMTP 
From: Sender <[email protected]>\r 
To: Receiver <[email protected]>\r 
Subject: Spammers List\r 
\r 
This is a test message\r 
SMTP 
+0

即時消息編寫的代碼作爲一個函數的定義。所以我需要有縮進。所以我使用msgstr = << - SMTP。但仍顯示與以前相同。 – user1429322 2012-08-06 08:21:43

+0

如果這對您很重要,使用'<< - SMTP'可以讓您縮進關閉的'SMTP',但是我認爲您不會嘗試縮進內容,因爲這不起作用。此外,我只是修復了我的答案中的一個小錯誤(這可能無濟於事,但...),因爲「here」字符串總是有一個尾隨換行符,我不需要最後一個空行,如果留在它應該包含一個'\ r'。 – 2012-08-06 08:46:37

+0

或者您可以在定義中使用縮進,但在使用該字符串之前以編程方式將其刪除。基本的答案是你不能在那裏有縮進,因爲它會破壞RFC822消息格式。 – tripleee 2012-08-06 09:28:04