Почтовая программа Rail 4, отправляющая массовые электронные письма с функцией скрытой копии и отписки

Я разрабатываю небольшой блог с функцией подписки. Он будет уведомлять подписчиков о главных сообщениях прошлой недели через скрытую почту с сервисом mandrill. Он работает нормально, но я застрял на функции отписки. Насколько я знаю, почта, которую получает любой подписчик, идентична скрытой копии, так что может быть я . Итак, мой вопрос: как я могу прикрепить ссылку, уникальную для каждого подписчика через скрытую почту, которая позволит им отказаться от подписки? Вот фрагмент моего кода:

addresses = subscription_emails.all.pluck(:email)
mail(from: "[email protected]", bcc: addresses,subject: "Posts of past week")

person Phuong Dao    schedule 19.11.2015    source источник


Ответы (1)


Насколько я понимаю ваш вопрос, URL-адрес отписки будет в содержимом электронного письма.

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

Проверьте: http://guides.rubyonrails.org/action_mailer_basics.html пункт 2.1.3 — Создать просмотр почтовой программы.

Допустим, ваш шаблон будет иметь что-то вроде строк:

<p>
  Here is your email contents
</p>
<p><a href="#{@unsubscribe_url}">Unsubscribe</a></p>

Эта переменная unsubscribe_url сгенерирует вам что-то вроде:

http://your-domain.com/newsletter/unsubscribe/unique-id-generated-for-the-user

Создайте маршрут в файле config/routes.rb, который приведет вас к контроллеру, обрабатывающему отмену подписки.

Вы также можете посмотреть здесь: http://railscasts.com/episodes/312-sending-html-email

ИЗМЕНИТЬ

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

Таким образом, я вижу два возможных решения:

а) На самом деле у вас нет уникального идентификатора для каждого пользователя, но у вас есть общая ссылка, которая приведет вас на страницу отписки. Например:

http://your-domain.com/newsletter/unsubscribe

Это отобразит страницу с вводом, где вы попросите человека написать свой адрес электронной почты. Используя это решение, вам придется учитывать плохое поведение пользователей, например:

  • вставленный адрес электронной почты не принадлежит к вашему списку пользователей
  • Алиса набрала электронную почту Боба

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

person rpbaltazar    schedule 19.11.2015
comment
Да, вы понимаете мою проблему. Но могу ли я уточнить, я отправляю почту через слепую копию, поэтому рельсы только отображают почту и отправляют список скрытой копии на почтовый сервер для распространения. И в этом проблема, я не могу сгенерировать URL-адрес, уникальный для пользователя, потому что почтовый сервер в основном дублирует представление почты и массовую отправку пользователям. Ваши инструкции были бы идеальными, если бы я отправил письмо каждому из моих клиентов. - person Phuong Dao; 19.11.2015
comment
Основываясь на вашем комментарии, я обновил свой ответ, так как он был слишком длинным для комментария. - person rpbaltazar; 20.11.2015
comment
В документе о мандриле я увидел, что есть способ. Mandrill сгенерирует URL-адрес для отказа от подписки на почту, если пользователь щелкнет по нему, адрес электронной почты будет записан в черный список mandrill. Вместо этого я использую общую ссылку - person Phuong Dao; 21.11.2015
comment
Ну, но таким образом вы не будете знать в своем приложении, кто попросил отписаться. Если в будущем вы решите изменить свой почтовый сервис, вам придется получить список и исключить его из своей базы данных. - person rpbaltazar; 23.11.2015
comment
Вы правы, кажется, что создать общий URL-адрес для отписки - правильный выбор. - person Phuong Dao; 23.11.2015