【问题标题】:mailForm not sending mail locallymailForm 不在本地发送邮件
【发布时间】:2020-12-03 13:58:08
【问题描述】:

我想创建一个简单的联系表单,用户只需写下他的姓名、电子邮件和消息,就可以将消息发送到特定的邮件地址(我的)。我正在使用 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 的通知(所以这意味着他们没有发现任何东西?)。 好吧,请帮忙:(

【问题讨论】:

  • 我认为问题不在于mail_form gem,它不负责发送电子邮件,它只是很好地包装。但是,您的问题在您的config.action_mailer 中。你是如何配置它的,谷歌文档中的一些指南还是?
  • 说实话,我根本没有配置动作邮件。我保留了已经存在的所有内容......例如raise_delivery_errors = falseperform_caching = false,以及我之前链接的内容
  • config.action_mailer.smtp_settings 但是这个好像你删除了个人数据,在你的本地仓库中是否有真实数据?
  • 您所说的“个人数据”、电子邮件地址和密码是什么意思?如果是,那么是的,它写在repo中
  • 好吧,看来我明白了。所以你刚刚输入了你的密码和电子邮件到config/development.rb,并希望用你的名字发送电子邮件,对吧?这行不通

标签: ruby-on-rails ruby rubygems mail-form


【解决方案1】:

你添加了吗

config.action_mailer.perform_deliveries = true

在您的config/environments/development.rb 中?

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

【讨论】:

  • 非常感谢它终于成功了! 3天搜到这唯一的一行,谢谢谢谢谢谢:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2014-08-19
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多