End of file (EOF) error when delivering an email using Mail_Form gem

673 views Asked by At

I have a simple form set up for a contact object

  <%= simple_form_for @contact do |f| %>
    <%= f.input :name %>
    <%= f.input :email %>
    <%= f.input :message %>
    <%= f.button :submit %>
  <% end %>
class Contact < MailForm::Base
    attribute :name, validate: true
    attribute :email, validate: true
    attribute :message  
    def headers
      { 
        subject: "My Contact Form",
        to: '#####gmail.com',
        from: %("#{name}" <#{email}>)
      }
    end
  end

the object is created as expected but upon sending the mail in the contact controller using .deliver

class ContactsController < ApplicationController
    def create
      @contact = Contact.new()
      @contact.name = [:name]
      @contact.email = [:email]
      @contact.message = [:message]
      if @contact.deliver
        render json: {message: "Email sent successfully"}
      else
        render json: @contact.errors
      end
    end
  end

I get the following error - EOFError in ContactsController#create

When I have tried to call .deliver on a contact object within IRB it provides me with the following

  Rendering /home/#####/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/mail_form-1.10.0/lib/mail_form/views/mail_form/contact.erb
  Rendered /home/#####/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/mail_form-1.10.0/lib/mail_form/views/mail_form/contact.erb (Duration: 7.3ms | Allocations: 1861)
MailForm::Notifier#contact: processed outbound mail in 62.3ms
Delivered mail [email protected] (192.0ms)
Date: Sat, 22 Apr 2023 20:00:30 +0100
From: ##### <#####@hello.com>
To: #############@gmail.com
Message-ID: <[email protected]>
Subject: My Contact Form
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<h4 style="text-decoration:underline">My Contact Form</h4>


  <p><b>Name:</b>
  #####</p>

  <p><b>Email:</b>
  #####@hello.com</p>

  <p><b>Message:</b>
  #####</p>


/home/#####/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/net-protocol-0.2.1/lib/net/protocol.rb:237:in `rbuf_fill': end of file reached (EOFError)

my smtp setup in development.rb is as follows

 config.action_mailer.perform_deliveries = true
  config.action_mailer.default_url_options = { host: 'localhost:3000' }
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
  address: 'smtp-relay.gmail.com',
  port: 587,
  domain: '@gmail.com',
  authentication: 'plain',
  enable_starttls_auto: true,
  user_name: ENV['username'],
  password: ENV['password']

I appreciate this is a lot of code to dump on here but I am really at my wits end with this problem. If anyone needs any further information to help please let me know.

So far I have tried looking into the EOF error but have really had limited luck as the error message is quite brief. I have treid changing the port as well as the local host address but nothing seems to work.

The parameters on the error page are as follows

{"authenticity_token"=>"[FILTERED]", "contact"=>{"name"=>"fff", "email"=>"ffff", "message"=>"fffff"}, "commit"=>"Create Contact"}

full stack trace:

net-protocol (0.2.1) lib/net/protocol.rb:237:in `rbuf_fill'
net-protocol (0.2.1) lib/net/protocol.rb:199:in `readuntil'
net-protocol (0.2.1) lib/net/protocol.rb:209:in `readline'
net-smtp (0.3.3) lib/net/smtp.rb:1057:in `recv_response'
net-smtp (0.3.3) lib/net/smtp.rb:1042:in `block in getok'
net-smtp (0.3.3) lib/net/smtp.rb:1067:in `critical'
net-smtp (0.3.3) lib/net/smtp.rb:1040:in `getok'
net-smtp (0.3.3) lib/net/smtp.rb:935:in `helo'
net-smtp (0.3.3) lib/net/smtp.rb:703:in `do_helo'
net-smtp (0.3.3) lib/net/smtp.rb:660:in `do_start'
net-smtp (0.3.3) lib/net/smtp.rb:611:in `start'
mail (2.8.1) lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
mail (2.8.1) lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
mail (2.8.1) lib/mail/message.rb:2145:in `do_delivery'
mail (2.8.1) lib/mail/message.rb:253:in `block in deliver'
actionmailer (7.0.4.3) lib/action_mailer/base.rb:588:in `block in deliver_mail'
activesupport (7.0.4.3) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.4.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.4.3) lib/active_support/notifications.rb:206:in `instrument'
actionmailer (7.0.4.3) lib/action_mailer/base.rb:586:in `deliver_mail'
mail (2.8.1) lib/mail/message.rb:253:in `deliver'
actionmailer (7.0.4.3) lib/action_mailer/message_delivery.rb:119:in `block in deliver_now'
actionmailer (7.0.4.3) lib/action_mailer/rescuable.rb:17:in `handle_exceptions'
actionmailer (7.0.4.3) lib/action_mailer/message_delivery.rb:118:in `deliver_now'
mail_form (1.10.0) lib/mail_form/delivery.rb:158:in `deliver!'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:400:in `block in make_lambda'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:236:in `block in halting_and_conditional'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:599:in `block in invoke_after'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:599:in `each'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:599:in `invoke_after'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:108:in `run_callbacks'
mail_form (1.10.0) lib/mail_form/shim.rb:49:in `deliver'
app/controllers/contacts_controller.rb:7:in `create'
actionpack (7.0.4.3) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (7.0.4.3) lib/abstract_controller/base.rb:215:in `process_action'
actionpack (7.0.4.3) lib/action_controller/metal/rendering.rb:53:in `process_action'
actionpack (7.0.4.3) lib/abstract_controller/callbacks.rb:234:in `block in process_action'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
actiontext (7.0.4.3) lib/action_text/rendering.rb:20:in `with_renderer'
actiontext (7.0.4.3) lib/action_text/engine.rb:69:in `block (4 levels) in <class:Engine>'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:127:in `instance_exec'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:138:in `run_callbacks'
actionpack (7.0.4.3) lib/abstract_controller/callbacks.rb:233:in `process_action'
actionpack (7.0.4.3) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (7.0.4.3) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
activesupport (7.0.4.3) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.4.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.4.3) lib/active_support/notifications.rb:206:in `instrument'
actionpack (7.0.4.3) lib/action_controller/metal/instrumentation.rb:66:in `process_action'
actionpack (7.0.4.3) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord (7.0.4.3) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (7.0.4.3) lib/abstract_controller/base.rb:151:in `process'
actionview (7.0.4.3) lib/action_view/rendering.rb:39:in `process'
actionpack (7.0.4.3) lib/action_controller/metal.rb:188:in `dispatch'
actionpack (7.0.4.3) lib/action_controller/metal.rb:251:in `dispatch'
actionpack (7.0.4.3) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (7.0.4.3) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (7.0.4.3) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.4.3) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (7.0.4.3) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (7.0.4.3) lib/action_dispatch/routing/route_set.rb:852:in `call'
rack (2.2.6.4) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.6.4) lib/rack/etag.rb:27:in `call'
rack (2.2.6.4) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.6.4) lib/rack/head.rb:12:in `call'
actionpack (7.0.4.3) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
actionpack (7.0.4.3) lib/action_dispatch/http/content_security_policy.rb:36:in `call'
rack (2.2.6.4) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.6.4) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/cookies.rb:704:in `call'
activerecord (7.0.4.3) lib/active_record/migration.rb:603:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (7.0.4.3) lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack (7.0.4.3) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
web-console (4.2.0) lib/web_console/middleware.rb:132:in `call_app'
web-console (4.2.0) lib/web_console/middleware.rb:28:in `block in call'
web-console (4.2.0) lib/web_console/middleware.rb:17:in `catch'
web-console (4.2.0) lib/web_console/middleware.rb:17:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/show_exceptions.rb:26:in `call'
railties (7.0.4.3) lib/rails/rack/logger.rb:40:in `call_app'
railties (7.0.4.3) lib/rails/rack/logger.rb:25:in `block in call'
activesupport (7.0.4.3) lib/active_support/tagged_logging.rb:99:in `block in tagged'
activesupport (7.0.4.3) lib/active_support/tagged_logging.rb:37:in `tagged'
activesupport (7.0.4.3) lib/active_support/tagged_logging.rb:99:in `tagged'
railties (7.0.4.3) lib/rails/rack/logger.rb:25:in `call'
sprockets-rails (3.4.2) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/request_id.rb:26:in `call'
rack (2.2.6.4) lib/rack/method_override.rb:24:in `call'
rack (2.2.6.4) lib/rack/runtime.rb:22:in `call'
activesupport (7.0.4.3) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/server_timing.rb:61:in `block in call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/server_timing.rb:26:in `collect_events'
actionpack (7.0.4.3) lib/action_dispatch/middleware/server_timing.rb:60:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/static.rb:23:in `call'
rack (2.2.6.4) lib/rack/sendfile.rb:110:in `call'
actionpack (7.0.4.3) lib/action_dispatch/middleware/host_authorization.rb:137:in `call'
railties (7.0.4.3) lib/rails/engine.rb:530:in `call'
puma (5.6.5) lib/puma/configuration.rb:252:in `call'
puma (5.6.5) lib/puma/request.rb:77:in `block in handle_request'
puma (5.6.5) lib/puma/thread_pool.rb:340:in `with_force_shutdown'
puma (5.6.5) lib/puma/request.rb:76:in `handle_request'
puma (5.6.5) lib/puma/server.rb:443:in `process_client'
puma (5.6.5) lib/puma/thread_pool.rb:147:in `block in spawn_thread' 
1

There are 1 answers

1
Holger Just On

It seems yo are running your server on your own desktop computer rather than a server. Here, it appears that "something" breaks the TCP connection between your desktop and gmail's smtp gateway just after your Rails app has sent the SMTP helo command.

This is often caused by some firewall or virus scanner on your desktop or within your (corporate) network which denies sending of outbound mails. It might also be required to sent mails via a corporate gateway in your network.

In any case, this does not appear to be caused by your app or gmail but your network settings or those of your (corporate) network.