Home » 🍪📮 Почтовый ящик действий, неизвестный компонент Rails

🍪📮 Почтовый ящик действий, неизвестный компонент Rails

Автоматизируйте обработку электронной почты с помощью нескольких строк кода, это то, что предлагает Action Mailbox, компонент Rails.

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

В любом случае, это мое мнение, так как в Capsens мы мало знали об этом до того, как Хелена представила его нам, поэтому мне было интересно, что она рассказала об этом и вам 😉

В программе:

  • Почтовый ящик действий

  • Мир рельсов

  • Работа твоей мечты

  • Соревнование

Привет, маленькие печеньки!

Добро пожаловать в 9-й выпуск Ruby Biscuit.
Теперь у вас 164 подписчика 🥳 И если вы еще не зарегистрированы:

В этом выпуске я предоставляю слово Еленаразработчик в Capsens чуть меньше года, который недавно открыл для себя Action MailBox.

Она предложила поговорить с вами о том, как она использует этот еще малоиспользуемый модуль Rails, с пошаговой реализацией и связанными с ним тестами, как мы любим делать на Ruby Biscuit!

Так что я оставляю вас в хорошие руки, и я встречусь с вами в конце своей статьи, чтобы поговорить о событии Rails, рабочих местах и ​​задачах дня!

Спойлер: прочитав всю рассылку, вы сможете выиграть место в Мир рельсов 😉

Представленный в Rails 6, Action Mailbox позволяет вам создавать различные почтовые ящики непосредственно в вашем приложении Rails, а затем захватывать, обрабатывать и хранить входящие электронные письма с помощью контроллеров.

Очень простой в реализации, этот компонент может быть полезен для целого ряда применений, вот мой:

Бухгалтер каждый день получал большое количество электронных писем от своих клиентов, которые присылали ему все свои подтверждающие документы, квитанции, отчеты о расходах, счета-фактуры или даже банковские выписки. Все эти документы нужно было хранить на платформе бухгалтерского учета, а затем обрабатывать с помощью API, который преобразовывал строки расходов в бухгалтерские проводки, чтобы облегчить закрытие года.

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

Вы понимаете, это была трудоемкая, повторяющаяся и утомительная задача. Вот где появляется Action Mailbox. Поэтому решение состояло в том, чтобы подключиться к почтовому ящику для прямой обработки электронных писем и их вложений.

Вот как мы реализовали нашу функцию:

Например, я начинаю с приложения Rails с валютой и Активное хранилище

Естественно, мы начнем с установки Action Mailbox в наше приложение.

Как и в случае с большинством компонентов Rails, нам предоставляется команда для его установки:

рельсовая консоль

Эта команда создает следующие файлы:

Конечно, не забудьте запустить свои миграции!

В application_mailbox.rb теперь мы собираемся определить, к какому адресу электронной почты смогут обращаться наши пользователи, и настроить контроллер, который будет отвечать за обработку входящей почты.

приложение/почтовые ящики/application_mailbox.rb

Эта строка кода сообщает ActionMailbox, что электронные письма, отправленные на адрес [email protected], будут обрабатываться процессором. InboundAttachmentsMailbox.

А именно, также можно использовать регулярное выражение вместо электронной почты, например, чтобы сказать, что все, отправленное на адрес вида «*@replies.*», обрабатывается контроллером специально. Например :

приложение/почтовые ящики/application_mailbox.rb

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

рельсовая консоль

Наш почтовый ящик будет унаследован от ApplicationMailbox и будет содержать метод с именем processкоторый будет единственным общедоступным методом.

Благодаря ActionMailbox::Base от которого наследует ApplicationMailboxу нас есть доступ к методу mail . Это экземпляр класса Почта:Сообщение что даст нам доступ к целому ряду методов для управления полученной электронной почтой.

Благодаря этим методам мы сможем легко получить доступ к метаданным и содержимому нашего электронного письма, в частности:

  • mail.body для тела письма

  • mail.attachments для вложений

  • mail.from для отправителя.

Для получения дополнительной информации об этом почтовом объекте вы можете обратиться к в документации.

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

Для нашего клиента нам нужна была система, которая могла бы получать электронные письма, поступающие на [email protected], связывать их с существующим пользователем на платформе, а затем связывать с ними их вложения.

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

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

приложение/почтовые ящики/inbound_attachments_mailbox.rb

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

приложение/почтовые ящики/inbound_attachments_mailbox.rb

я использую .decoded чтобы получить доступ к моим вложениям, они изначально закодированы в Base64, как и body из моей электронной почты.

Обратите внимание, что важно проверять размер, тип содержимого и расширение документов, чтобы не допустить сохранения какого-либо файла в базе данных. Для проверки вы можете использовать драгоценный камень active_storage_validations.

Как говорится : «Никогда не доверяйте вводу пользователя»

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

Чтобы протестировать наш почтовый ящик локально, не нужны внешние сервисы, Rails делает нашу жизнь проще! Он предоставляет нам форму, к которой мы можем получить доступ локально по следующему маршруту:

http://localhost:3000/rails/conductor/action_mailbox/inbound_emails/new

(Мы вернемся за дизайном 🙄)

Этот маршрут был создан, когда мы установили Action MailBox в наше приложение Rails, другие доступны, я позволю вам открыть их, выполнив rails routes -g mailbox в вашей консоли.

Хоп-хоп-хоп, это не повод не писать юнит-тесты 😉

спец/почтовые ящики/inbound_attachments_mailbox_spec.rb

Имейте в виду, что за пределами вашей локальной среды, промежуточной, рабочей или иной, вам потребуется немного больше настроек!

Для запуска Action Mailbox вам нужен только один сервис SMTP external получает сообщения электронной почты, а затем пересылает их на ваш почтовый ящик. Для этого доступен список внешних сервисов, называемых «Ingresses». Советую обратиться непосредственно к официальная документация узнать больше.

Если вы пропустили информацию, Rails Foundation организует первая официальная конференция по Rails !

Несколько месяцев назад нам сообщили о создании Rails Foundation. Новая организация, чья миссия состоит в том, чтобы сделать нашу экосистему разработчиков Ruby on Rails процветающей. Последнее 6 апреля было опубликовано письмо объявляя о первом мероприятии, организованном Rails Foundation, которое будет называться Rails Worlds и состоится 5 и 6 октября 2023 г. в Амстердаме !

Rails World — это двухдневная конференция, на которой представлены технические доклады, демонстрации, семинары, нетворкинг и основные доклады. Создатели и сопровождающие Rails расскажут вам о последних возможностях и лучших методах разработки на Rails.

Вишенка на торте, среди тех, кто предложит ответ на вызов Ruby Biscuit, мы выберем одного человека в течение 24 часов и предложим ему место на мероприятии!!

Так что идите немного дальше, чтобы найти инструкции для вызова.

Как вы знаете, за Ruby Biscuit стоит Capsens 👋, веб-агентство, специализирующееся на Ruby on Rails уже 10 лет.

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

Что замечательно, так это то, что мы в Capsens отлично знаем экосистему Ruby on Rails во Франции и имеем обширную сеть компаний.

Вот почему мы объявляем в этом информационном бюллетене, что используем наши знания о профессии, чтобы помочь вам найти работу своей мечты!

Конкретно:

  1. Хочешь найти работу своей мечты? Тогда ответьте на это письмо! Вы можете сказать «Привет», этого достаточно!

  2. Мы сразу предложим вам слоты под видео для знакомства

  3. Тогда мы предложим вам 3 компании, которые соответствуют тому, кто вы есть. И для каждой из этих позиций:

    1. Вы можете пообщаться с разработчиком команды (не с самим рекрутером), чтобы узнать, как обстоят дела изнутри. Без балды

    2. Разработчик Capsens поможет вам:

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

      2. Подготовим вас к правильной работе

Вы хотите двигаться к более полноценной профессиональной жизни? 😀 Что ж, ждем ваших
Электронная почта ! А если вам уже нравится ваша работа, не обращайтесь к нам! Или сделайте это, чтобы порекомендовать нам вашу коробку 😉

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

Недавно я осознал, насколько формирующими были ката. Тем не менее, я редко нахожу время, чтобы сделать это.

Хорошо, я признаю это, я никогда этого не делаю, но я уверен, что я не единственный!

Итак, решено, вы получите новый вызов по новостной рассылке, он не потребует слишком много энергии, и вы можете играть в игру!

За вызов последнего информационного бюллетеня поздравляем Рафаэль за его ответ

Нам очень понравилось i % (3 * 5) == 0 в одном сравнении и напишите
3 * 5 вместо 15 потому что он выражает намерение. Это концепция, которую можно найти, если мы работаем, например, с длительностью. 86400не очевидно, что он соответствует, тогда как 60 * 60 * 24 гораздо легче догадаться, что это количество секунд в сутках.

И это также первый раз, когда я вижу case используется без параметров!

Вот еще одно предложение от нас, предложенное Антуаном. Достоинство оригинальности:

Я дам вам подумать об этом 🥲

А вот и правила следующей задачи:

Напишите «Ruby Biscuit» без использования литералов: без строк, чисел, символов, регулярных выражений и т. д.

Бонусный балл тому, кто сделает это с минимальным количеством символов.

Как и в прошлый раз, присылайте мне свои ответы, отвечая на этот информационный бюллетень, и я опубликую лучший из них в следующем выпуске!

Чтобы узнать о новых советах по Ruby on Rails, не ищите дальше, вы попали в нужное место.

Хелена и Мелани 😉

Read more:  Scottish Open в прямом эфире - Лука Бресель и Джадд Трамп среди дневных действий; Джон Хиггинс и Марк Селби в последних играх

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.