2009-07-29 14 views
4

私はRubyスクリプトで電子メールを送信しようとしていますが、私の概念証明が機能していません。私はメールサーバーにtelnetで接続し、そのようにメールを送信しますが、このスクリプトはエラーを発生させるために、メールサーバの原因となることができます。私の実際のスクリプトで501 5.5.4 Invalid AddressRubyスクリプトで電子メールを送信する - 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を実行していることに注意してください。メールサーバはExchangeサーバです。

telnetが同じ値で動作する理由はわかりませんが、このスクリプトは無効なアドレスエラーを発生させます。

誰かが私を助けることができますか?

EDIT:上記のコードは正常に動作しますが、最初は最後のメソッド呼び出しでコンマを使いませんでした。私は馬鹿のように感じる。

答えて

1

あなたはそれを信じることができますか?私は恥ずかしい

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

...私はちょうどメソッド呼び出しでカンマを欠けている、馬鹿のように感じます。

とにかく、上記のコードは誰でも興味があればうまく動作します。私のようにコンマを残してはいけません。

1

実際のメールアドレスに無効な文字が含まれていないことを確認してください。たとえば、this questionを参照してください。

+0

ありがとうございますが、私のマシン名と私のメールアドレスの両方が完全に有効で、奇数の文字はなく、先頭または末尾の空白やドットはありません。私のマシン名にはダッシュが付いていますが...私は企業ネットワークに入っているので、コンピュータ名を変更するのは面倒です。ダッシュが問題になることはありますか? telnetが動作することを忘れないでください! –

+0

ダッシュは問題ありませんが、アンダースコアはドメインには有効ではありません。サーバーが実際に見ているものを見るためにSMTPトラフィックを調べる必要があるかもしれません。あなたが見ているとは思っていないかもしれません。 –

1

Rubyでメールを送信する場合は、Action Mailerをお勧めします。スニペットhereを参照してください。

+0

私はむしろNet :: SMTPを使用したいと思います...私はすべてのジャズを必要としません。ルビーコアにないものを使用することは私の最後の手段です(つまり、アクションメーラやTMailなど) –

1

コードにバグがあります。悪意のあるユーザーは、件名に改行を使用して、電子メールにさらに多くのヘッダーを挿入できます。

+0

良いキャッチです。このコードは、一度だけ使用するバッチジョブのためにローカルに実行されるスクリプトとしてのみ使用されていたので、私はその種のセキュリティを考慮しませんでした。しかし、このコードを使用したいと思う他の人にとってはまだ良い点です。ありがとう。 –

関連する問題