Question

I'm trying to send email with a Ruby script, but my proof of concept isn't working. I can telnet to the mail server and send mail that way, but this script causes the mail server to raise an error: 501 5.5.4 Invalid Address

#!/usr/bin/ruby

require 'net/smtp'

def send_email(to, subject = "", body = "")
    from = "my@email.com"
    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 "my@email.com", "test", "blah blah blah"

In my actual script, my@email.com is a valid email. 192.168.10.213 is the mail server and 192.168.0.218 is my local ip. Note that I'm running windows xp, and the mail server is an exchange server.

I don't understand why telnet works with the same values, but this script raises the invalid address error.

Can somebody help me?

EDIT: The above code now works fine, I originally left out the commas in the final method call. I feel like an idiot.

Was it helpful?

Solution 3

Can you believe it? I feel like an idiot, I'm just missing commas in the method call...

send_email "my@email.com", "test", "blah blah blah"

I'm embarrassed.

Anyway, the above code works great if anyone is interested. Just don't leave out the commas like I did.

OTHER TIPS

Make sure your actual email address does not contain invalid characters. For example, see this question.

I'd recommend Action Mailer for sending mails with Ruby. See a snippet here.

There is a bug in your code. A malicious user could insert more headers into your email by using newlines in the subject.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top