【问题标题】:Rails and Gmail - Reply-To function not working as hopedRails 和 Gmail - 回复功能无法按预期工作
【发布时间】:2023-03-15 11:32:01
【问题描述】:

在我的 rails 应用程序中,我有一个联系表单,可让用户向我的 gmail 帐户发送电子邮件。

问题 1

我使用相同的 gmail 帐户发送电子邮件,因为我用于接收它们,因此当我单击“回复”按钮时,gmail 为自己设置了一封新电子邮件....

我的邮件如下所示:

class Notification < ActionMailer::Base

  default :to => ENV['GMAIL_USER']

  def hello(contact)    
   mail(
    :from => contact[:email],
    :return_path => contact[:email],
    :subject => "[My Website] << #{contact[:subject]}", 
    :body => contact[:body] )
  end
end

我的印象是设置:return_path =&gt; contact[:email] 可以确保gmail 知道将回复发送给谁......显然我错了。有谁知道如何解决这个问题?

问题 2

大多数 action_mailer 教程都会让我使用 :from =&gt; contact.email 而不是 :from =&gt; contact[:email] 设置我的邮件方法,如下所示:

  def hello(contact)
      @contact = contact    
      mail(
           :from => contact.email,
           :return_path => contact.email,
           :subject => "[My Website] << #{contact.subject}",
           :body => contact.body
           )
  end

但是当我这样做时,我收到以下错误消息:

undefined method `email' for #<ActiveSupport::HashWithIndifferentAccess:0xdde82f0>

任何人都知道推荐的方法对我不起作用。

附录

FWIW,以防万一,我的联系人模型扩展了一个无表的 active_record 模型,因为我不想使用数据库但确实想要验证,所以它看起来像这样:

#contact.rb
class Contact < Tabless
  column :name,          :string
  column :email,         :string
  column :body,          :text
  column :subject,       :string      
  # validations go here
end

# tabless.rb
class Tabless < ActiveRecord::Base

  # create an array of columns
  def self.columns()
    @columns ||= [];
  end

  # add new column to columns array
  def self.column(name, sql_type = nil, default = nil, null = true)
    columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s,
    default,
    sql_type.to_s,
    null)
  end

  # override the save method to prevent exceptions
  def save(validate = true)
    validate ? valid? : true
  end
end

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

也许我错过了什么,但你不能只是use :reply_to吗?

mail(
 :from => contact[:email],
 :reply_to => contact[:email],
 :subject => "[My Website] << #{contact[:subject]}", 
 :body => contact[:body] )

您可以通过任何方式将电子邮件作为字符串获取。 .email 不是 Hash 的有效方法,因此在您的示例中不起作用。您看到的其他示例可能假设您正在使用联系模型。如果 contact[:email] 为您提供了一个电子邮件地址,那么这应该不是问题。

【讨论】:

    【解决方案2】:

    我已经设法通过创建另一个 gmail 帐户并使用该帐户发送电子邮件来解决此问题。现在,当我点击回复按钮时,它会为实际发件人设置一封电子邮件

    This link解释帮助我理解了它

    【讨论】:

      【解决方案3】:

      电子邮件回复标题的符号是:'reply-to'。对于原始问题,这应该有效:

      mail(
      :from => contact[:email],
      :'reply-to'=> contact[:email],
      :subject => "[My Website] << #{contact[:subject]}", 
      :body => contact[:body] )
      

      我最近在 Gmail 重写电子邮件的 From 标头时遇到了这种情况。我今天在http://blog.rietta.com/2012/01/rails-gmail-reply-to-on-contact-form.html 写了关于解决方案的博客。

      对我来说,使用 Apple Mail 或 Google Apps 本身回复电子邮件很容易。因此,回复标头似乎由 Google 的 SMTP 服务器正确传输。

      我希望这可以帮助某人避免这个小问题:-)

      【讨论】:

        猜你喜欢
        • 2020-02-26
        • 1970-01-01
        • 1970-01-01
        • 2016-11-12
        • 1970-01-01
        • 1970-01-01
        • 2020-06-15
        • 2021-10-13
        相关资源
        最近更新 更多