ActionMailer EOFError


#1

I’m having trouble getting ActionMailer to actually send anything. I
keep getting EOFError and I can’t seem to find anything about it.

Thanks, Shad

environment.rb

Include your app’s configuration here:

ActionMailer::Base.server_settings = {
:address => “smtp.liquidcultures.com”,
:port => 25,
:domain => “www.liquidcultures.com”,
:user_name => “removed_email_address@domain.invalid”,
:password => “my_password”,
:authentication => :plain
}

mailman.rb

class Mailman < ActionMailer::Base

def mail( email ) # Email header info MUST be added here
@recipients = email
@from = “removed_email_address@domain.invalid”
@subject = “Thank you for registering with our website”

# Email body substitutions go here
@body["email"] = email
puts "here"

end
end

mail.rhtml

<?xml version="1.0" encoding="utf-8"?> hello, <%= @email %>

I run the console and then try:

Mailman.deliver_mail( “removed_email_address@domain.invalid”)

And get:
EOFError: End of file reached
from
/Applications/Locomotive/Bundles/rails-0.14.1-min.bundle/Contents/Resources/ports/lib/ruby/1.8/net/protocol.rb:197:in
sysread' from /Applications/Locomotive/Bundles/rails-0.14.1-min.bundle/Contents/Resources/ports/lib/ruby/1.8/net/protocol.rb:197:inrbuf_fill’
from
/Applications/Locomotive/Bundles/rails-0.14.1-min.bundle/Contents/Resources/ports/lib/ruby/1.8/net/protocol.rb:196:in
timeout' from /Applications/Locomotive/Bundles/rails-0.14.1-min.bundle/Contents/Resources/ports/lib/ruby/1.8/timeout.rb:55:intimeout’
from
/Applications/Locomotive/Bundles/rails-0.14.1-min.bundle/Contents/Resources/ports/lib/ruby/1.8/net/protocol.rb:196:in
rbuf_fill' from /Applications/Locomotive/Bundles/rails-0.14.1-min.bundle/Contents/Resources/ports/lib/ruby/1.8/net/protocol.rb:160:inreaduntil’
(etc.)


#2

just a guess, but you might want to try changing :authentication
to :login instead of :plain.


#3

Nope, that’s not it. Same result with :plain or :login.


#4

I figured it out.

Seems that my hosting company does not require authentication on SMTP.
I commented out the username, password, authentication variables and
everything works perfectly now.

Thanks Lou!

Shad


#5

Have you tested your email w/o using activesupport?

#!/bin/env ruby

require ‘net/smtp’

# Helper method.
# Append _appendage_ to end of string if it already doesn't exist
# at the end of the string.
class String #:nodoc:
	def appendIfMissing(appendage)
		return self if appendage.nil? || appendage.size < 1
		return appendage if size < 1
		if self[-appendage.size..-1] == appendage
			self
		else
			self + appendage
		end
	end
end


class String #:nodoc:
  def blank?
	empty? || strip.empty?
  end
end


# Print an error message.
def err(msg, printRubyErr=false, fatal=true) #:nodoc:
	STDERR.print "\n### ERROR: #{msg}\n\n"
	STDERR.print "\n#{$!}\n\n" if printRubyErr
	exit if fatal
	"### ERROR: #{msg}\n#{$!}\n"
end



# simple check of email address.
def checkMailAddress(address, descr) #:nodoc:
	address.strip!
	addr = address[/<?\w+@\w+\.\w+>?$/]
	if addr.blank?
		err(descr,false,false)
		return nil
	end
	addr
end


# Send email.
def mail( od )
	# The email is composed of the 'From', 'To', and 'Subject' fields, 

followed by the body text.
# Strip off leading white space.
(msgstr = <<END_OF_MAIL_MESSAGE).gsub!(/^\s+/, ‘’)
From: #{od[’-=’]}
To: #{od[’-t’]}
Subject: #{od[’-j’].blank? ? ‘No Subject’ : od[’-j’]}

END_OF_MAIL_MESSAGE

	msgstr += od['-b']

	return if (addr_from = checkMailAddress(od['-='], "no 'From' address 

(#{od[’-=’]})") ).nil?
return if (addr_to = checkMailAddress(od[’-t’], “no ‘To’ address
(#{od[’-t’]})”) ).nil?

	# The email is actually sent here.
	begin
		Net::SMTP.start(od['-m'], 25, od['-n'], od['-S'], od['-P'], :login) { 

|smtp|
smtp.send_message msgstr, addr_from, addr_to
}

		puts "-- mail sent to #{addr_to}" if od['-V']
	rescue Exception => ex
		err("unable to send mail.\n#{msgstr}\n#{$!}\naddr 

from:#{addr_from}\naddr to:#{addr_to}", true)
end
end # mail

od = {  '-=' => 'My Long Name<removed_email_address@domain.invalid>', 		# mail from
		'-t' => 'My Long Name<removed_email_address@domain.invalid>', 	# mail to
		'-j' => 'This is a test',		# mail subject
		'-b' => 'Body text of the email.',	# mail body text
		'-m' => 'smtp.XXX.net',			# mail server
		'-n' => 'www.XXX.net',			# domain sending mail from
		'-S' => 'mailusername',			# mail user name
		'-P' => 'super_secret_password',	# mail password
		'-V' => true }

mail od

END