以下の内容はhttps://patorash.hatenablog.com/entry/2024/12/03/100123より取得しました。


Rodauthで日本語のメールを送る際に出るwarningを消す方法

最近、認証機能の実装をするためにRodauthを使っています。多機能で便利ですね、Rodauth。

rodauth.jeremyevans.net

しかし、Rodauthでメールを使う機能(パスワードリセット等)を有効化して、メール本文に日本語を使った場合に以下のようなwarningが出ていました。

Non US-ASCII detected and no charset defined.
Defaulting to UTF-8, set your own if this is incorrect.

Rodauthのメールを使う機能はgem mailに依存しているので、mailの設定でcharsetをUTF-8にしなければなりません。

とりあえずググる…。

docs.komagata.org

shepherdmaster.hateblo.jp

うーん、どちらも Mail::Message でcharsetやcontent_typeを設定しているっぽいけれど、Rodauthは自動でメールが送られているので途中で処理を差し込むことができるのかどうか?というところから調査。

結論から言うと、Email Base FeatureのAuth Methodsに send_email(email) がありました。

rodauth.jeremyevans.net

これをオーバーライドすればよさそう。 auth_class_eval ブロック内で上記のメソッドをオーバーライドして、そこでcharsetをUTF-8に設定します。

class SampleApp < Roda
  plugin :rodauth do
    # 有効にする機能は適当に…
    enable :login, :logout, :change_password, :reset_password

    auth_class_eval do
      # メールを送信する際に呼ばれるメソッドをオーバーライドする
      # charsetをUTF-8に設定する。これを行わないと、warningが発生するため
      # @param [Mail::Message] email メールオブジェクト
      def send_email(email)
        email.charset = "UTF-8"
        email.deliver!
      end
    end

    route do |r|
      # roduthのルーティングを定義
      r.rodauth
    end
  end
end

これで、Rodauth経由で送信されるメールでのwarningは消えました👍めでたしめでたし。




以上の内容はhttps://patorash.hatenablog.com/entry/2024/12/03/100123より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14