Dans l'application my rails, lorsque l'utilisateur crée un message, un e-mail est envoyé à l'utilisateur qui crée le message. J'ai essayé la gemme "delay_job_active_record" pour l'opération d'envoi en arrière-plan. Le courrier est envoyé avec succès. Après cela, j'essaie simplement de faire la même action en utilisant sidekiq via un ouvre-lettre. L'événement se produit et un ouvre-lettre affiche le contenu du courrier. Après cela, au lieu d'un ouvre-lettre, utilisez les paramètres smtp de google. Même, sidekiq ouvre l'ouvre-lettre sans envoyer d'e-mails. Alors, je désinstalle le coupe-papier. Mais cela provoque une erreur comme celle-ci
Aucun coupe-papier de ce type pour les fichiers ou répertoires
Ceci est mon Posts_controller :::
source 'https://rubygems.org' git_source(:github) {|repo| "https://github.com/#{repo}.git"} ruby '2.3.3' gem 'bootstrap', '~> 4.2.1' gem 'bullet', group: 'development' gem 'cancancan', '~> 2.0' gem 'coffee-rails', '~> 4.2' gem 'devise' gem 'jbuilder', '~> 2.5' gem 'jquery-rails' gem 'jquery-turbolinks' gem 'local_time' gem 'paperclip', '~> 5.0.0.beta1' gem 'puma', '~> 3.11' gem 'rails', '~> 5.2.2' gem 'sass-rails', '~> 5.0' gem 'turbolinks', '~> 5' gem 'uglifier', '>= 1.3.0' gem 'will_paginate', '>= 3.1.6' group :production do gem 'pg', '~> 0.21' end group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'rspec-rails', '~> 3.8' gem 'sqlite3', '1.3.13' gem 'rack-mini-profiler' # gem 'letter_opener' end group :development do gem 'web-console', '>= 3.3.0' gem 'launchy' end group :test do gem 'capybara' gem 'factory_bot_rails' gem 'shoulda-matchers', '~> 4.0.0.rc1' gem 'database_cleaner' gem 'selenium-webdriver' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'rails-controller-testing' gem 'strong_migrations' gem "image_magick" gem "mini_magick" gem 'rails_warden' gem 'activesupport', '~> 5.2', '>= 5.2.2' gem 'remotipart', :git => 'https://github.com/westonganger/remotipart', :branch => 'fix_escape_javascript' gem 'will_paginate-bootstrap4' gem 'best_in_place' gem 'sidekiq' gem 'daemon', '~> 1.2' gem 'delayed_job_active_record' gem 'delayed_job_web' gem 'sinatra', '>= 1.3.0', :require => nil
Voici mon fichier post_job:
config.action_mailer.perform_deliveries = true config.action_mailer.raise_delivery_errors = true config.action_mailer.default_options = {from: 'aaaaaaaa@gmail.com'} config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'smtp.gmail.com', port: 587, domain: 'gmail.com', user_name: 'xxxxxxx@gmail.com', password: 'yyyyyyy', authentication: 'plain', enable_starttls_auto: true }
Voici mon fichier Post_mailer:
class PostMailer < ApplicationMailer def announce_email(user, post_title) @user = user @post_title = post_title mail(to: @user.email, subject: 'hurrah!!! Post created Successfully') end end
Et voici mon development.rb:
class PostJob < ApplicationJob queue_as :default def perform(user, post_title) PostMailer.announce_email(user, post_title).deliver end end
Et voici mon Gemfile:
def create @post = @topic.posts.new(post_params) PostJob.perform_later(current_user, @post.name) end
S'il y a des erreurs que j'ai faites. Dites une autre façon d'envoyer des e-mails à l'utilisateur en utilisant sidekiq.
3 Réponses :
Je mets à jour ma réponse alors que je testais ce problème et j'ai dû apporter les modifications suivantes pour que mes e-mails puissent également être vus par l'ouvre-lettre en utilisant sidekiq.
`
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } ###ADDED FOR LETTER OPENER AND DEVISE MAILERS config.action_mailer.delivery_method = :letter_opener Rails.application.routes.default_url_options[:host] = 'localhost:3000'`
`
if Rails.env.development? require 'sidekiq/testing' Sidekiq::Testing.inline! end
J'ai également supprimé la ligne config.action_mailer.perform_deliveries = true
(cela ne devrait pas avoir d'importance) et Maintenant, je peux facilement accéder à l'url / letter_opener
pour voir mes e-mails stockés localement.
Comme je travaille sur l'éditeur c9, cela fonctionne même avec n'importe quel nom d'hôte local.
J'espère que cela vous aidera
letter_opener
est un outil utilisé dans l'environnement de développement pour «imiter» le processus d'envoi d'e-mails. Cependant, SMTP doit être défini dans votre environnement de production. Donc:
development.rb:
config.action_mailer.default_url_options = { host: 'https://yourwebsite.com' } config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'smtp.gmail.com', domain: 'mail.google.com', port: 587, user_name: SOME_SECRET_USERNAME, password: SOME_SECRET_PASSWORD, authentication: :plain, enable_starttls_auto: true }
production.rb:
config.action_mailer.raise_delivery_errors = false config.action_mailer.perform_caching = false config.action_mailer.default_url_options = { host: 'localhost:3000' } config.action_mailer.delivery_method = :letter_opener config.action_mailer.perform_deliveries = true
Essayez de redémarrer le serveur !! Si rien ne se passe, essayez de redémarrer le système.
Pouvez-vous poster votre gemfile s'il vous plaît? Vous utilisez probablement une gemme qui intercepte tous les e-mails et les ouvre dans le navigateur, peut-être mailcatcher?
avez-vous essayé de redémarrer le serveur?
Oui! J'ai essayé @nijeesh