2
0
生成AIに関する記事を書こう!
Qiita Engineer Festa20242024年7月17日まで開催中!

[Dify] v0.6.10以降ではメール送信失敗するようになったから調査した話

Posted at

はじめに

Difyをバージョン0.6.10へのアップデート後にメール送信機能が突然失敗するようになりました。この記事では、問題の発見から解決までの調査プロセスをここに残します。
Difyのメールの設定はこちらで残しています。

問題の発見

Dify v0.6.10へのアップデート直後、それまで正常に機能していたメール送信機能が動作しなくなりました。エラーログを確認したところ、以下のエラーメッセージが表示されていました:

SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1007)

このエラーは、SSL/TLS接続の確立に問題があることを示唆しています。

エラーの分析

WRONG_VERSION_NUMBERエラーは通常、クライアントとサーバーが異なるプロトコルバージョンを使用しようとしている場合に発生します。具体的には:

  1. クライアントがSSL/TLS接続を試みているのに対し、サーバーが非暗号化接続を期待している。
  2. あるいは、クライアントとサーバーが互換性のないSSL/TLSバージョンを使用しようとしている。

このエラーは、接続方法が突然変更されたことをと推測できますね。

初期調査

  1. SMTPサーバーの設定(ホスト、ポート、認証情報)が正しいことを再確認しました。
  2. ネットワーク接続に問題がないことを確認しました。
  3. ファイアウォールの設定に変更がないことを確認しました。

これらの基本的なチェックでは問題の原因が特定できませんでした。

コードの詳細調査

問題の原因を特定するため、Dify v0.6.10のソースコードの変更点を調査しました。すると、api/libs/smtp.pyファイルに変更があることがわかりました。

変更の詳細(api/libs/smtp.py):

    def send(self, mail: dict):
        smtp = None
        try:
            smtp = smtplib.SMTP(self.server, self.port, timeout=10)
-           if self._use_tls:
-                smtp.starttls()
+           if self.use_tls:
+               if self.opportunistic_tls:
+                    smtp = smtplib.SMTP(self.server, self.port, timeout=10)
+                    smtp.starttls()
+                else:
+                   smtp = smtplib.SMTP_SSL(self.server, self.port, timeout=10)
+            else:
+                smtp = smtplib.SMTP(self.server, self.port, timeout=10)
            if self.username and self.password:
                smtp.login(self.username, self.password)

新しく self.opportunistic_tls というパラメータが導入されて、TLS使用時の接続ロジックに変更がありますね。

解決策

v0.6.9以前と同じような方法でメール送信を行う場合、opportunistic_tls パラメータを True に設定しないといけません。
これは環境変数で設定できるので以下に変更しておきましょう。

SMTP_OPPORTUNISTIC_TLS: 'true'

最後に

以下の時にうまくできる方法はわかっていないので知っている人がいれば教えて欲しいです。

SMTP_OPPORTUNISTIC_TLS: 'false'
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0