質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

1回答

3258閲覧

Railsアカウント有効化メールの文字化け

kentt

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/04/27 13:32

編集2020/04/27 13:54

前提・実現したいこと

Ruby on Rails のチュートリアルに沿って少しずつ改変しオリジナルのアプリを作成しています.アカウントの有効化とパスワードの再設定をMailerを用いて実装したいのですが,開発環境内のサーバーログを確認すると,文字化けしており,メール内容が確認できません.メール内にアカウント有効化のリンクやパスワード再設定用のリンクを置いているので確認したくてもできない状況です.どこかの段階で誤って文字コードを変換してしまっているのでしょうか.
また,herokuを用いてディプロイしているのですが,本番環境では問題なくメールを読むことができ,有効化リンクも正常であるようです.
よろしくお願いします.

発生している問題・エラーメッセージ

エラーメッセージ(サーバーログ)

Parameters: {"utf8"=>"✓", "authenticity_token"=>"HK5kumujwh49eoI57Z7WJhws6r+oZHshlc/6B0P4A1sGXW9szC3daPVV3Up0sJ1e//RXC9n7ONviy7RlEA3+vg==", "user"=>{"name"=>"テスト", "email"=>"test3@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"新規登録"} (0.1ms) begin transaction User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ? [["email", "test3@gmail.com"], ["LIMIT", 1]] User Create (2.2ms) INSERT INTO "users" ("name", "email", "created_at", "updated_at", "password_digest", "activation_digest") VALUES (?, ?, ?, ?, ?, ?) [["name", "テスト"], ["email", "test3@gmail.com"], ["created_at", "2020-04-27 13:15:14.678637"], ["updated_at", "2020-04-27 13:15:14.678637"], ["password_digest", "$2a$10$4VA9yIINMhL98ZNewQF0guKDk/ktbKQ7Yteg5J7GUzLYmA10ck5ja"], ["activation_digest", "$2a$10$yihXSgtJ9bt9CSg9MQxtveOtvnL.489VbxRMAgjUh9Y3dHtbQqxvG"]] (7.8ms) commit transaction Rendering user_mailer/account_activation.html.erb within layouts/mailer Rendered user_mailer/account_activation.html.erb within layouts/mailer (0.7ms) Rendering user_mailer/account_activation.text.erb within layouts/mailer Rendered user_mailer/account_activation.text.erb within layouts/mailer (0.4ms) UserMailer#account_activation: processed outbound mail in 171.8ms Sent mail to test3@gmail.com (7.2ms) Date: Mon, 27 Apr 2020 13:15:14 +0000 From: noreply@example.com To: test3@gmail.com Message-ID: <5ea6dae2ef443_1e372d21f5c73687@ip-172-31-47-27.mail> Subject: =?UTF-8?Q?=E3=80=90Symphony=E3=80=91=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=81=AE=E6=9C=89=E5=8A=B9=E5=8C=96?= Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_5ea6dae2ede03_1e372d21f5c73542"; charset=UTF-8 Content-Transfer-Encoding: 7bit ----==_mimepart_5ea6dae2ede03_1e372d21f5c73542 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 44OG44K544OI5qeY77yMDQoNClN5bXBob25544Gr5paw6KaP55m76Yyy44GX 44Gm44GE44Gf44Gg44GN44GC44KK44GM44Go44GG44GU44GW44GE44G+44GZ 77yO5Lul5LiL44Gu44Oq44Oz44Kv44KS44Kv44Oq44OD44Kv44GX44Ki44Kr 44Km44Oz44OI44Gu5pyJ5Yq55YyW44KS44GX44Gm44GP44Gg44GV44GE77yO DQoNCmh0dHBzOi8vNjUwYWJiMmM1ZDNkNGIwZmJhMGE0NWU1NTE5Njk5NTQu dmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tL2FjY291 bnRfYWN0aXZhdGlvbnMvUE5EaFR1dVN4QlEwQmhxU0pyQklmUS9lZGl0P2Vt YWlsPXRlc3QzJTQwZ21haWwuY29tDQo= ----==_mimepart_5ea6dae2ede03_1e372d21f5c73542 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCiAgPGhlYWQ+DQogICAgPG1ldGEg aHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7 IGNoYXJzZXQ9dXRmLTgiIC8+DQogICAgPHN0eWxlPg0KICAgICAgLyogRW1h aWwgc3R5bGVzIG5lZWQgdG8gYmUgaW5saW5lICovDQogICAgPC9zdHlsZT4N CiAgPC9oZWFkPg0KDQogIDxib2R5Pg0KICAgIDxoMT5TeW1waG9ueTwvaDE+ DQoNCjxwPuODhuOCueODiOanmO+8jDwvcD4NCg0KPHA+U3ltcGhvbnnjgavm lrDopo/nmbvpjLLjgZfjgabjgYTjgZ/jgaDjgY3jgYLjgorjgYzjgajjgYbj gZTjgZbjgYTjgb7jgZnvvI7ku6XkuIvjga7jg6rjg7Pjgq/jgpLjgq/jg6rj g4Pjgq/jgZfjgqLjgqvjgqbjg7Pjg4jjga7mnInlirnljJbjgpLjgZfjgabj gY/jgaDjgZXjgYTvvI48L3A+DQoNCg0KPGEgaHJlZj0iaHR0cHM6Ly82NTBh YmIyYzVkM2Q0YjBmYmEwYTQ1ZTU1MTk2OTk1NC52ZnMuY2xvdWQ5LmFwLW5v cnRoZWFzdC0xLmFtYXpvbmF3cy5jb20vYWNjb3VudF9hY3RpdmF0aW9ucy9Q TkRoVHV1U3hCUTBCaHFTSnJCSWZRL2VkaXQ/ZW1haWw9dGVzdDMlNDBnbWFp bC5jb20iPuOCouOCq+OCpuODs+ODiOacieWKueWMljwvYT4NCg0KDQoNCg0K ICA8L2JvZHk+DQo8L2h0bWw+DQo= ----==_mimepart_5ea6dae2ede03_1e372d21f5c73542-- Redirected to https://650abb2c5d3d4b0fba0a45e551969954.vfs.cloud9.ap-northeast-1.amazonaws.com/ Completed 302 Found in 386ms (ActiveRecord: 10.4ms)

######app/models/user.rb

ruby

1# アカウントを有効にする 2 def activate 3 # update_attribute(:activated, true) 4 # update_attribute(:activated_at, Time.zone.now) 5 update_columns(activated: true, activated_at: Time.zone.now) 6 end 7 8 # 有効化用のメールを送信する 9 def send_activation_email 10 UserMailer.account_activation(self).deliver_now 11 end 12 13 # パスワード再設定の属性を設定する 14 def create_reset_digest 15 self.reset_token = User.new_token 16 # update_attribute(:reset_digest, User.digest(reset_token)) 17 # update_attrinute(:reset_sent_at, Time.zone.now) 18 update_columns(reset_digest: User.digest(reset_token), reset_sent_at: Time.zone.now) 19 end 20 21 # パスワード再設定のメールを送信する 22 def send_password_reset_email 23 UserMailer.password_reset(self).deliver_now 24 end

######app/controllers/users_controller.rb

Ruby

1def create 2 @user = User.new(user_params) 3 if @user.save # => Validation 4 # Sucess 5 @user.send_activation_email 6 flash[:info] = "アカウントを有効化する為のメールを送信いたしました." 7 redirect_to root_url 8 # GET "/users/#{@user.id}" => show 9 else 10 # Failure 11 render 'new' 12 end 13 end

######app/mailers/user_mailer.rb

Ruby

1class UserMailer < ApplicationMailer 2 3 def account_activation(user) 4 5 @user = user 6 7 mail to: user.email, subject: "【Symphony】アカウントの有効化" 8 end 9 10 11 def password_reset(user) 12 13 @user = user 14 15 mail to: user.email, subject: "【Symphony】パスワードの再設定" 16 end 17end 18

######app/mailers/application_mailer.rb

Ruby

1class ApplicationMailer < ActionMailer::Base 2 default from: 'noreply@example.com' 3 layout 'mailer' 4end 5

######app/views/user_mailer/account_activation.html.erb

html

1<h1>Symphony</h1> 2 3<p><%= @user.name %>様,</p> 4 5<p>Symphonyに新規登録していただきありがとうございます.以下のリンクをクリックしアカウントの有効化をしてください.</p> 6 7 8<%= link_to "アカウント有効化", edit_account_activation_url(@user.activation_token, email: @user.email) %> 9

######app/views/user_mailer/account_activation.text.erb

html

1<%= @user.name %>様, 2 3Symphonyに新規登録していただきありがとうございます.以下のリンクをクリックしアカウントの有効化をしてください. 4 5<%= edit_account_activation_url(@user.activation_token, email: @user.email) %> 6

##追伸
ActionMailerでISO-2022-JP形式でメールを送信するに従って,ActionMailerに以下を追加することで,

Ruby

1default charset: 'ISO-2022-JP'

メールの英語部分は表示されるようになりました.日本語がまだ文字化けしてしまうので,どうかよろしくお願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

歴史的な事情によりeメールは7bitで送信されるのが標準です。
結果、あなたが文字化けだと認識しているデータをネットワーク上に流すことになるので
ログに保存するデータとして7bitエンコードされているものを保存する方が自然に思います。

一応

ruby

1default 'Content-Transfer-Encoding' => '8bit'

で改善するかもしれません。(ただし、正常に送受信できる確率は下がります)

投稿2020/04/28 08:23

asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問