Forum: Ruby on Rails ActionMailer EOFError

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
9d2ae4f6fbea3cdf89f4323b256140bc?d=identicon&s=25 shad.reynolds (Guest)
on 2005-11-12 12:50
(Received via mailing list)
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  => "pogs@liquidcultures.com",
  :password  => "my_password",
  :authentication  => :plain
    }

mailman.rb
========
class Mailman < ActionMailer::Base

  def mail( email )    # Email header info MUST be added here
    @recipients = email
    @from = "ls@liquidcultures.com"
    @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"?>
<html>
	<head>
	</head>
	<body id="" onload="">
    hello, <%= @email %>
	</body>
</html>


I run the console and then try:
  >>Mailman.deliver_mail( "foo@foobar.com")

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:in
`rbuf_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:in
`timeout'
        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:in
`readuntil'
(etc.)
Ce60c4f78a63b0695e4dafc4bd7964f7?d=identicon&s=25 vanek (Guest)
on 2005-11-12 12:50
(Received via mailing list)
just a guess, but you might want to try changing :authentication
to :login instead of :plain.
9d2ae4f6fbea3cdf89f4323b256140bc?d=identicon&s=25 shad.reynolds (Guest)
on 2005-11-12 16:10
(Received via mailing list)
Nope, that's not it.  Same result with :plain or :login.
Ce60c4f78a63b0695e4dafc4bd7964f7?d=identicon&s=25 vanek (Guest)
on 2005-11-12 18:25
(Received via mailing list)
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<user@XXX.net>', 		# mail from
			'-t' => 'My Long Name<user@XXX.net>', 	# 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__
9d2ae4f6fbea3cdf89f4323b256140bc?d=identicon&s=25 shad.reynolds (Guest)
on 2005-11-12 20:55
(Received via mailing list)
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
This topic is locked and can not be replied to.