Контактная форма Rails отправь мне письмо

Я точно следую платному учебнику и настраиваю страницу контактов, где, когда посетители заполняют форму и отправляют ее, я, владелец сайта, получаю электронное письмо со своим именем, электронной почтой и комментарием. Цель состоит в том, чтобы я мог легко ответить и ответить на них.

Мне это кажется странным, потому что странно, что ActionMailer дает вам возможность отправлять сообщения с чужой учетной записи электронной почты, для которой не определены параметры SMTP. На самом деле, следуя этому руководству, мне не нужно объявлять какие-либо настройки SMTP.

Но это не работает... хотел бы помочь с устранением неполадок.

Мой почтовый код:

class UserMailer < ActionMailer::Base

def contact_email(contact) 
    @contact = contact 
    mail(to: jdong8@gmail.com, from: @contact.email, :subject => "New message at JamesDong.com") 
end 

конец

Фрагмент кода контроллера:

def create
    @contact= Contact.new(secure_params)
    if @contact.save
      UserMailer.contact_email(@contact).deliver

2 ответа

Решение

Вы можете клонировать репозиторий git по адресу https://github.com/RailsApps/learn-rails чтобы получить код из книги Learn Ruby on Rails. Вы увидите, что код работает как реализовано.

Если вы посмотрите на пример кода, параметры SMTP настраиваются в файлах config/environment /development.rb и config/environment /production.rb.

config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: "example.com",
  authentication: "plain",
  enable_starttls_auto: true,
  user_name: ENV["GMAIL_USERNAME"],
  password: ENV["GMAIL_PASSWORD"]
}

GMAIL_USERNAME и GMAIL_PASSWORD устанавливают источник SMTP для почты.

UserMailer Код только создает (часть) заголовок и тело сообщения электронной почты. "От" и "до" будут отображаться только для внешнего вида. Посмотрите на необработанное сообщение электронной почты, и вы увидите полный набор заголовков, которые показывают реальное происхождение сообщения.

Короче говоря, UserMailer code устанавливает фальшивое "от", а реальное "от" устанавливается, когда электронное письмо отправляется с учетной записи Gmail.

Я могу ошибаться, но исходя из моего опыта работы с Rails, это невозможно, вам понадобятся настройки SMTP для учетной записи, с которой вы отправляете почту.

Здесь есть тонна вопросов, касающихся правильной настройки ActionMailer, но кажется, что вы пытаетесь отправить почту, не сообщая, откуда отправлять почту.

Этот вопрос и лучший ответ на него могут помочь, если это ваша проблема:

Как настроить почтовик действий (я должен зарегистрировать домен)?

Другие вопросы по тегам