首页 > 解决方案 > mailForm 不在本地发送邮件

问题描述

我想创建一个简单的联系表格,用户只需写下他的姓名、电子邮件和消息,就可以将消息发送到特定的邮件地址(我的)。我正在使用 mailForm 来做这件事,但它不起作用,我不知道为什么,我需要一些帮助......我显然看过以前的主题,但它没有帮助我。

这是我的代码:

模型

class Contact < MailForm::Base
  attribute :name, validate: true, length: { minimum: 2 }
  attribute :email, validate: /\A[^@\s]+@[^@\s]+\z/i
  attribute :message, validate: true, length: { minimum: 10 }
  attribute :nickname, captcha: true

  def headers
    { subject: "My Contact Form",
      to: "mypersonalemail@gmail.com",
      from: %("#{name}" <#{email}>)
    }
  end
end

控制器

class ContactsController < ApplicationController
  def new
    @contact = Contact.new
  end

  def create
    @contact = Contact.new(contacts_params)
    @contact.request = request
    if @contact.deliver
      flash.now[:notice] = 'Merci pour votre message, je reviens vers vous très prochainement !'
    else
      flash.now[:alert] = "Votre message n'a pas pu être envoyé, veuillez vérifier les données saisies"
      render :new
    end
  end

  private

  def contacts_params
    params.require(:contact).permit(:name, :email, :message)
  end
end

因为它是一个 gmail 地址,所以我在 development.rb中有这个

  config.action_mailer.default_url_options = { host: 'https://localhost:3000' }
  config.action_mailer.delivery_method = :smtp

  config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               'gmail.com',
    user_name:            'mypersonalemail@gmail.com',
    password:             'mypersonalpassword',
    authentication:       'plain',
    enable_starttls_auto: true  }

一切都很好,尤其是当我在控制台中输入时:

Running via Spring preloader in process 4086
Loading development environment (Rails 6.0.3.3)
irb(main):001:0> c = Contact.new(name: 'Nobody', email: 'nobody@email.com', message: 'testestest')
=> #<Contact:0x00007fe140203e00 @name="Nobody", @email="nobody@email.com", @message="testestest">
irb(main):002:0> c.valid?
=> true
irb(main):003:0> c.deliver
  Rendering /home/slegrez/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mail_form-1.8.1/lib/mail_form/views/mail_form/contact.erb
  Rendered /home/slegrez/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mail_form-1.8.1/lib/mail_form/views/mail_form/contact.erb (Duration: 22.8ms | Allocations: 1843)
MailForm::Notifier#contact: processed outbound mail in 62.8ms
Delivered mail 5fc8ed66de0be_ff62b269f0d999015752@DESKTOP-DQRGQT4.mail (890.4ms)
Date: Thu, 03 Dec 2020 15:51:34 +0200
From: Nobody <nobody@email.com>
To: mypersonalemail@gmail.com
Message-ID: <5fc8ed66de0be_ff62b269f0d999015752@DESKTOP-DQRGQT4.mail>
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>
  Nobody</p>

  <p><b>Email:</b>
  nobody@email.com</p>

  <p><b>Message:</b>
  testestest</p>


=> true

在那之后,我没有收到任何邮件,即使是在垃圾邮件中。我的意思是,c.valid?是真实的,所以我真的不明白为什么它不发送任何东西。我检查了电子邮件地址和密码,没有错误。我在不太安全的应用程序上禁用了 gmail 安全性,因为我收到了来自 gmail 的通知(所以这意味着他们没有发现什么?)。好吧,请帮助:(

标签: ruby-on-railsrubyrubygemsmail-form

解决方案


你添加了

config.action_mailer.perform_deliveries = true

在你的config/environments/development.rb ?

为了在本地发送电子邮件,您需要在开发环境中添加它。


推荐阅读