メールボックスの設定
オープンSTMPサービス
163 Eメール、例えば、STMP内の[設定]をクリックします
Open Clientのライセンスキー
私は開いているので、上記のように、そのページ以上あります。
このように、メールボックスが完了した準備。
組み込み関数を使用してDjangoのメール
1.次の設定ファイルを追加します。
#のメール設定は = EMAIL_BACKEND ' django.core.mail.backends.smtp.EmailBackend ' EMAIL_HOST = ' smtp.163.com ' EMAIL_PORT = 25 #Eメールのメールボックス EMAIL_HOST_USER = ' メールボックス' #を提供し、クライアントのメールボックスにサイドの承認パスワード EMAIL_HOST_PASSWORD = 「認証コード」 #の受信者が送信者を確認するには EMAIL_FROM = 「<メールボックスを送信>緑の果樹園を」
2.メールを送信するためのコードを書きます
django.shortcutsから、レンダリングリダイレクト、HttpResponseにインポート
django.core.mail輸入send_mailから
シリアライザとしてitsdangerous輸入TimedJSONWebSignatureSerializerから
django.confインポート設定から
DEF (リクエスト)emailtest: #は、アクティベーションリンクを含む、アクティベーションメールを送信する:HTTP://127.0.0.1:8000 / / 3 /アクティブユーザー #アクティブリンクは、ユーザーの識別情報と識別情報を含める必要があり、暗号化されなければならない #の暗号化をユーザの識別情報は、活性化は、トークン生成 ユーザーIDを3 = 電子メールでは = 「メールアカウントを受信し、」 シリアライザは、シリアライザ(settings.SECRET_KEY 1800 = ) 情報 = { 「確認」:ユーザーID} トークン = serializer.dumps(情報) トークン = トークン.decode() #のメール 件名= 「緑の果樹園ウェルカムメッセージ」 メッセージ ="" SENDER = settings.EMAIL_FROM レシーバー = [メール] html_message = " <h2は>緑の果樹園が登録したメンバーになるためにあなたを歓迎</ H2> </ BR>アカウント<のhrefを=「有効にするには、以下のリンクをクリックします。http:127.0.0.1 : 8000 / " \ " 127.0.0.1 :: 8000 /ユーザー/アクティブ/%S </a>のユーザー/アクティブ/ HTTP%S「> "%(トークン、トークン) send_mail(件名、メッセージ、送信者、受信者、html_message = html_message) #は応答を返し、後藤 返す(はHttpResponseを「正常に送信された電子メールは、受信ことに注意してください」)
URLをサポート
= urlpatterns [ URL(R&LT ' ^ emailtest / $ '、views.emailtest、名前= " emailtest ")、 #のメールテスト ]
3.お使いのブラウザで次のアドレスを入力し、あなたは、「メール送信」のメッセージを見ることができます
http://127.0.0.1:8000/user/emailtest/
図に示すようなメールを受け取りました。
電子メールを受信します
メール内容の詳細
セロリメールを使用してください
メッセージジャンゴを送信するために組み込み関数を使用する場合は、メールを送信するためのDjangoのSTMPサーバは時間がかかり、STMPサーバは、ユーザにメッセージを送信する時間がかかりますが、メールを送信中に、この時間サーバが応答を返すようにするために、ユーザーが待っている、待機時間の場合あまりにも長い間、それは間違いなく大幅にユーザーエクスペリエンスが低下します。
今回は、非同期セロリは、ユーザへの応答を返しながら、Djangoのサーバーがメールを送信するためにメッセージを送信するためにセロリを使用することができます。ここでは、随時メールを送信シミュレートするために睡眠を使用しています。
1. インストールセロリ
セロリをインストールするPIP
2. 構成設定ファイル
#のメール設定は = EMAIL_BACKEND ' django.core.mail.backends.smtp.EmailBackend ' EMAIL_HOST = ' smtp.163.com ' EMAIL_PORT = 25 #Eメールのメールボックス EMAIL_HOST_USER = ' メールボックス' #を提供し、クライアントのメールボックスにサイドの承認パスワード EMAIL_HOST_PASSWORD = 「クライアントライセンスキー」 #の送信者を確認する受信者 EMAIL_FROM = 「緑の果樹園<送信メールボックス> 」 #Djangoのキャッシュ構成 キャッシュが= { 「デフォルト」{: 「バックエンド」:" django_redis.cache.RedisCache " 、 " LOCATION ":" のRedis://127.0.0.1:9分の6379 " 、 " OPTIONS " :{ " CLIENT_CLASS ":" django_redis.client.DefaultClient " 、 } } }
新規プロジェクトcelery_tasksフォルダで、[ファイル]フォルダ内の新しいタスクは、タスクファイルを書き込みます。
django.core.mail インポートsend_mail から django.conf のインポート設定 からセロリのインポートセロリ のインポート時間 #タスクハンドラの終わりの必要性は、これらの単語を追加したときに #のインポートOS #インポートDjangoの #1 」、(「DJANGO_SETTINGS_MODULE」os.environ.setdefaultをプロジェクト名.settings「) #django.setup() #オブジェクトクラスセロリのインスタンス作成 のApp =セロリ(' celery_tasks.tasks '、ブローカー= ' Redisの://127.0.0.1:8分の6379を' ) #は、タスク関数を定義 app.task @ DEFsend_register_active_email(to_email、ユーザー名、トークン): "" " アクティベーションメッセージを送信" "" 件名 = " グリーンオーチャードウェルカムメッセージ" メッセージ = "" SENDER = settings.EMAIL_FROM レシーバ = [to_email] html_message = " 歓迎<H2>%S、あなたは、登録メンバーが</ H2> </ BR>アカウントのhrefを= '有効にするには、以下のリンクをクリックして、緑の果樹園となってます。http:127.0.0.1:8000 / <a "\" user/active/%s'> HTTP:127.0.0.1: 8000 /ユーザー/アクティブ/ S </a>の%"%(ユーザー名、トークン、トークン) send_mail(件名、メッセージ、送信者、受信者、html_message =html_message) time.sleep( 5)
送信メッセージは4. 呼び出しタスクがcelery_tasksの中のメッセージ機能を送ります。
django.shortcuts インポートし、リダイレクトする、のHttpResponseをレンダリング から django.core.mail インポートsend_mail から itsdangerous インポートシリアライザAS TimedJSONWebSignatureSerializer から django.conf のインポート設定が DEF emailtest(要求): #はアクティベーションリンクを含むアクティベーションメールを送信します。http://127.0 .0.1:8000 /ユーザー/アクティブ/ 3 #アクティブリンクは、ユーザーの識別情報と識別情報を含める必要があるが、暗号化されなければならない #暗号化されたユーザID情報を、活性化がトークンを生成 ユーザーIDを3 =。 ユーザ名は = 「mumun 」 をメールで送信 = " 閉じましたMailメールボックス」 シリアライザ =シリアライザ(settings.SECRET_KEY、1800 ) 情報 = { ' 確認' :ユーザーID} トークン = serializer.dumps(情報) トークン = token.decode() #セロリがメール送信使っ send_register_active_email.delayを(電子メールでは、ユーザー名、トークン) #応答、goto文を返す リターン(のHttpResponseを「正常に送信された電子メールは、受信ことに注意してください」)
URLをサポート
= urlpatterns [
URL(R&LT '^ emailtest / $'、views.emailtest、名前= "emailtest")、#メールテスト
]
5. ターンRedisのサービス。
E:\> CDのE:\ YifChanSoft \データベース\ Redisの\ RedisSoft \ Redisの-x64-3.2.100 E:\ YifChanSoft \データベース\ Redisの\ RedisSoft \ Redisの -x64-3.2.100>のRedisサーバ--serviceをインストールredis.windows-service.conf - ログレベルの冗長 E:\ YifChanSoftデータベース\ \ Redisの\ RedisSoft \ Redisの -x64-3.2.100> redis- CLI 127.0.0.1:6379>を選択8 OK 127.0.0.1:6379[8] >キー* (空のリストまたはセット) 127.0.0.1:6379 [8]>キー* 1)" _kombu.binding.celery " 2)" _kombu.binding.celery.pidbox " 3)" _kombu.binding.celeryev "
スクリーンショットは、Redisのサービスを有効にします
6.どこかでプロジェクトコードのコピー、敷地内に入り、作業者モデルのタスクを開始、
労働者の仕事のファイルコードとして使用ノートでは、そうでない労働者がCONFを呼び出すことはできません、事前にDjangoの初期化コードを開始している必要があります情報;
それは次のように持っている必要があります
#これの最後のいくつかの単語を追加するには、タスクの必要性 のインポートのOS インポートDjangoの os.environ.setdefault(「DJANGO_SETTINGS_MODULE 」、「プロジェクト名.settings 」) django.setup()
オープン労働者モード:
セロリ-A celery_tasks.tasks労働者-l情報
問題があり、次のように与えられ、
ValueError:ない十分な値をアンパックする(3予想は、0を得ました)
理由
この問題は、win10上で発生する実行celery4.xを
解決します
eventletをインストールするPIP
そして、オープンモードワーカーにパラメータを追加
セロリ-A celery_tasks.tasks労働者-l情報-P eventlet
ワーカーショットモードがオンになり、コンテンツがありますが、あまりのために、それは半分だけカットされています
7.ブラウザで次のアドレスを入力し、あなたは、「メール送信」のメッセージを見ることができます
http://127.0.0.1:8000/user/emailtest/
次のように受信メールがあります