0

現在、djangoを使用してメールを送信していますが、インターネットに接続せずにローカルホストで作業しているときにメールを送信しようとしています。失敗[Errno 11004] getaddrinfoするのは理解できます。問題は、エラーを適切に管理できるようにエラーをキャッチする方法があるかどうかを知りたいということです。方法はありますか?

4

3 に答える 3

0

電子メールを送信してから、インターネットに接続されていないローカル ホストのエラーをキャッチするのではなく、開発中に電子メールを送信しようとしないでください。このdjango.settings.DEBUGオプションを使用して、電子メールを送信するかどうかを決定できます。

テスト用またはインターネット接続なしで実行する場合に、電子メールをファイルにルーティングする方法の例を次に示します。

from django.core import mail
from django import settings
import tempfile

# Change SAVE_EMAIL_TO_FILE to be appropriate for your setup.  It could
# be based on settings.DEBUG or some other indication that you're running
# without an internet connection.
SAVE_EMAIL_TO_FILE = settings.DEBUG

def my_send_mail(*args, **kwargs):
    if SAVE_EMAIL_TO_FILE:
        # No emails during development.  Save to a file instead.
        with tempfile.NamedTemporaryFile(delete=False) as email_file:
            email_file.write("{args}\n{kwargs}\n".format(
                args=str(args),
                kwargs=str(kwargs)))
    else:
        # Production environment.
        mail.send_mail(*args, **kwargs)

これには、電子メールを送信できない場合、実稼働マシンまたはインターネットに接続されたマシンでの開発中に常に例外が発生するという利点があります。

于 2013-02-25T01:40:09.903 に答える
0
try:

except Exception, e:
    code = '000'
    if hasattr(e, 'code'):
        code = e.code
        msg = 'No message returned from the server'
    if hasattr(e, 'msg'):
        msg = e.msg
    messages.error(
        request,
            'Error connecting to server. ERROR: {0} {1}'.format(code, msg)
    return ''
于 2013-02-25T02:33:18.980 に答える
0

sendmail 関数を呼び出す場所でこれを試してください。

import socket

try:
   ...
except socket.gaierror:
   pass
于 2013-02-25T00:17:42.880 に答える