Rails и Gmail - функция Reply-To работает не так, как ожидалось - PullRequest
1 голос
/ 03 ноября 2010

В моем приложении 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 => contact[:email] гарантирует, что gmail будет знать, кому отправлять ответ .... Очевидно, я ошибаюсь.Кто-нибудь знает, как это исправить?

Задача 2

В большинстве учебных пособий action_mailer я настроил свой почтовый метод, используя :from => contact.email вместо :from => 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, в случае, если это помогает, моя модель контактов расширяет модель table_ 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

Ответы [ 3 ]

0 голосов
/ 03 ноября 2010

Мне удалось это исправить, создав другую учетную запись Gmail и используя ее для отправки электронных писем.Теперь, когда я нажимаю кнопку ответа, он отправляет электронное письмо фактическому отправителю

Эта ссылка объясняет, помогли мне понять

0 голосов
/ 18 января 2012

Символом заголовка Reply-To для электронной почты является «reply-to».На первоначальный вопрос это должно сработать:

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

Я недавно столкнулся с этой ситуацией, когда Gmail переписал заголовок письма «От».Сегодня я писал об этом решении в http://blog.rietta.com/2012/01/rails-gmail-reply-to-on-contact-form.html.

. Для меня легко ответить на электронное письмо, используя Apple Mail или Google Apps.Таким образом, заголовок ответа, похоже, правильно передается SMTP-сервером Google.

Надеюсь, это поможет кому-то избежать этой маленькой уловки:

0 голосов
/ 03 ноября 2010

Может быть, я что-то упускаю, но вы не можете просто использовать :reply_to?

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

И любой способ получить письмо в виде строки должно быть хорошо..email не является допустимым методом для хэша, поэтому он не будет работать в вашем примере.Другие примеры, которые вы видели, вероятно, предполагают, что вы работаете с моделью контакта.Если контакт [: email] получит вам адрес электронной почты, это не должно быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...