Итак, у вас есть класс Mailer и методы.
Mailers очень похожи на контроллеры Rails. Они также имеют методы под названием actions
и используют views
для структурирования контента. Где контроллер генерирует содержимое, подобное HTML, чтобы отправить обратно клиенту, Mailer создает сообщение, которое будет доставлено по электронной почте.
Теперь вам нужно определить notify_existing_user
действие вашей почтовой программы, вы хотите отправить по электронной почте к существующему пользователю говоря Thanks for signing up!
Таким образом, вы должны добавить:
class InviteMailer < ApplicationMailer
default from: '[email protected]'
def notify_existing_user(user)
@user = user
mail(to: @user.email, subject: 'Thanks for signing up!')
end
end
default
Hash - Это хэш значений по умолчанию для любого отправляемого вами по электронной почте .
Таким образом, вы можете использовать свой электронный адрес здесь, как с адреса электронной почты.
Теперь вам нужно создать Mailer Вид:
notify_existing_user.html.erb
в app/views/invite_mailer/
.Это будет шаблон, используемый для электронной почты, отформатированный в HTML:
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1>Welcome to example.com, <%= @user.name %></h1>
<p>Thanks for signing up!</p>
</body>
</html>
Вы также можете создать текстовый вид notify_existing_user.text.erb
в app/views/invite_mailer/
:
Welcome to example.com, <%= @user.name %>
===============================================
Thanks for signing up!
Mailers действительно просто еще один способ для визуализации Посмотреть. Вместо , отображая представление и отправляя HTTP-протокол, они просто отправляют его через почтовые протоколы. В связи с этим, имеет смысл просто попросить вашего контроллера сообщить Mailer отправить сообщение , когда пользователь будет успешно создан.
Давайте создадим простой пользовательский эшафот:
rails generate scaffold user name email login
rake db:migrate
Затем, вы можете вызвать метод InviteMailer.notify_existing_user
из ваших users_controller
как следующее:
class UsersController < ApplicationController
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
# Tell the InviteMailer to notify the existing user that just been created
InviteMailer.notify_existing_user(@user).deliver_later
format.html { redirect_to(@user, notice: 'User was successfully created.') }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: 'new' }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
end
Вот и все. Теперь, когда вы создаете пользователя и когда пользователь будет сохранен, ему будет отправлено электронное письмо с использованием метода notify_existing_user
вашего InviteMailer
.
Спасибо за ссылку Макс. На самом деле это ресурс, о котором я говорю в своем вопросе, когда я говорю «Rails Guide». Я собираюсь обновить его для большей ясности. Проблема в том, что я с трудом переводил содержание цитаты в реальный Mailer, даже используя документацию. Я надеялся, что кто-то может указать мне в правильном направлении. –
Я пропустил ссылку в своем первом чтении. Вот почему я удалил комментарий. – max
Нет проблем. Спасибо, что нашли время, чтобы посмотреть на мой вопрос;) –