tags:

views:

944

answers:

4

Hi all,

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 = "[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"

In my actual script, [email protected] 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.

+1  A: 

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

Vinay Sajip
Thanks, but both my machine name and my email address are perfectly valid, no odd characters, no leading or trailing white-space or dots. My machine name does have a dash in it though... it's a hassle to change my computer name, as I'm in a corporate network. Could the dash be the problem? Remember, telnet works!
Peter Di Cecco
Dash should be fine, though underscore isn't valid for domains. You might need to look at the SMTP traffic to see what the server is actually seeing - it may not be what you think it's seeing.
Vinay Sajip
+1  A: 

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

kgiannakakis
I'd rather use Net::SMTP ... I don't need all that jazz. Using anything that's not in the ruby core is my last resort (ie Action Mailer or TMail or similar)
Peter Di Cecco
A: 

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

send_email "[email protected]", "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.

Peter Di Cecco
A: 

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

superjoe30
Good catch. This code was only used as a locally run script for a one time use batch job, so I didn't consider that kind of security. It's still a good point though for anyone else who may want to use this code. Thanks.
Peter Di Cecco