1

私は非常に奇妙な問題を抱えています。内部サーバー エラーが発生すると、Django 1.6 は管理者に電子メールを送信しようとします。明らかにメール サーバーが TLS を使用することに同意しますが、その後使用に失敗します。スニッフィングされたトラフィックは次のとおりです。

T 2a00:1450:400c:c0c::6d:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 [AP]
  220 smtp.gmail.com ESMTP lh1sm2677557wjb.20 - gsmtp..                      
##
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 -> 2a00:1450:400c:c0c::6d:587 [AP]
  ehlo peneios.cressendo.org..                                               
##
T 2a00:1450:400c:c0c::6d:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 [AP]
  250-smtp.gmail.com at your service, [2001:648:2ffc:1014:a800:ff:fe6b:e499].
  .250-SIZE 35882577..250-8BITMIME..250-STARTTLS..250-ENHANCEDSTATUSCODES..25
  0-PIPELINING..250-CHUNKING..250 SMTPUTF8..                                 
#
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 -> 2a00:1450:400c:c0c::6d:587 [AP]
  STARTTLS..                                                                 
#
T 2a00:1450:400c:c0c::6d:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 [AP]
  220 2.0.0 Ready to start TLS..                                             
#
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 -> 2a00:1450:400c:c0c::6d:587 [AP]
  mail FROM:<noreply@hydroscope.gr> size=6578..                              
#
T 2a00:1450:400c:c0c::6d:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 [AP]
  ......F                              

ご覧のとおり、メール サーバーは TLS の開始に同意しましたが、Django はその後、暗号化されていないmail FROM:ディレクティブを送信しました。

しかし、Djangoに接続して./manage.py shellこれを実行すると:

from django.core.mail import mail_admins
mail_admins('hello', 'hello world')

メールは正しく送信されます:

T 2a00:1450:400c:c09::6c:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 [AP]
  220 smtp.gmail.com ESMTP i2sm2684051wjx.42 - gsmtp..                       
##
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 -> 2a00:1450:400c:c09::6c:587 [AP]
  ehlo peneios.cressendo.org..                                               
##
T 2a00:1450:400c:c09::6c:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 [AP]
  250-smtp.gmail.com at your service, [2001:648:2ffc:1014:a800:ff:fe6b:e499].
  .250-SIZE 35882577..250-8BITMIME..250-STARTTLS..250-ENHANCEDSTATUSCODES..25
  0-PIPELINING..250-CHUNKING..250 SMTPUTF8..                                 
#
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 -> 2a00:1450:400c:c09::6c:587 [AP]
  STARTTLS..                                                                 
#
T 2a00:1450:400c:c09::6c:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 [AP]
  220 2.0.0 Ready to start TLS..                                             
#
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 -> 2a00:1450:400c:c09::6c:587 [AP]
  ...........z/x....%....y.F.F..i..8.._w...S...z.0.,.2.../.+.1.-.........(.$.
  ....*.&.....k.j.9.8.'.#.....).%.....g.@.3.2.............E.D.........=.5.<./
[practically nothing readable from this point on]
4

2 に答える 2

2

問題が見つかりました。

システムを Web サーバーで実行する場合と Web サーバーを介して実行する場合の違い./manage.py shellは、後者の場合geventは が使用されていることです。システムは、SSL コードにバグがあるDebian のgevent1.0.1を実行していました。これにより、Django が TLS を開始しているときに例外が発生しました。

Django は、エラーが発生したところで停止するのではなく、エラーが発生していないふりをして電子メールの送信を試み続けたため、スニフに示されている奇妙な動作が発生しました。これはDjango のバグです。

于 2016-02-11T15:06:55.103 に答える