2016-09-11 10 views
0

「Django By Example」のwebshopチュートリアルを行っています。私はWindowsを使用しています。Django Celery Webshop:注文確認メールは送信されません

注文フォームページを作成しました。見栄えの良い。注文を送信した後、ウェブサイトには: "ありがとうございます。注文は正常に完了しました。注文番号は7です。" 「お客様」は注文確認メールを受信しません。

他のコマンドプロンプトでは、それはセロリを実行している、この種のエラーを与える:

[2015-09-14 19:43:47,526: INFO/MainProcess] Received task: orders. 
tasks.order_created[933e383c-095e-4cbd-b909-70c07e6a2ddf] 
[2015-09-14 19:43:50,851: INFO/MainProcess] Task orders.tasks. 
order_created[933e383c-095e-4cbd-b909-70c07e6a2ddf] succeeded in 
3.318835098994896s: 1 

場合:あなたが本に応じてコマンドプロンプトを持っている必要がありますどのような

"ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it." 

以下のコードをsettings.pyに追加すると、注文確認メールがコマンドプロンプトに正常に送信されます。

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' 

この問題がRabbitMQに接続されているかどうかわかりません。私はそれが今働いているのかどうか、私のシステムでは分かりません。以前は私ができる限り最高のErlangとRabbitMQをインストールしました。 cmatskas.com: "RabbitMQはデフォルトではWindowsサービスとして動作し、技術的にはRabbitMQとのやりとりを開始するために何もする必要はありません。

編集:(私はSMTP2GOを稼働させるのに役立つと思う私のtasks.pyを追加しています) tasks.py 受注/以下

from celery import task 
from django.core.mail import send_mail 
from .models import Order 


@task 
def order_created(order_id): 
    """ 
    Task to send e-mail notification when an order is successfully created. 
    """ 
    order = Order.objects.get(id=order_id) 
    subject = 'Order nr. {}'.format(order.id) 
    message = 'Dear {}, \n\nYou have successfully placed an order.\ 
       Your order id is {}.'.format(order.first_name, order.id) 
    mail_sent = send_mail(subject, message, '[email protected]', [order.email]) 
    return mail_sent 

は、本チュートリアルのtasks.pyにsmtp2goステップ2のコードを追加するための私の失敗した試みです。それは作業を取得する方法を知っている(またはいくつかのヒントの取得)するために素晴らしいことだ:EMAIL_BACKEND設定が指定されていない場合

from celery import task 
from django.core.mail import EmailMultiAlternatives 
from .models import Order 


@task 
def order_created(order_id): 
    """ 
    Task to send e-mail notification when an order is successfully created. 
    """ 
    order = Order.objects.get(id=order_id) 
    subject = 'Order nr. {}'.format(order.id) 
    from_email = 'Max Burgers' 
    to = order.email 
    text_content = 'Dear {}, \n\nYou have successfully placed an order.\ 
       Your order id is {}.'.format(order.first_name, order.id) 
    html_content = '<p>This is an awesum <strong>HTML</strong> message.</p>' 
    msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) 
    msg.attach_alternative(html_content, "text/html") 
    msg.send() 
    return 

答えて

0

、Djangoはローカルマシン上(無担保)SMTPサーバーを介して電子メールを送信しようとします。あなたの場合はおそらく存在しないでしょう。

送信する(実際の)メールを送信するサーバーを設定する必要があります。私はsmtp2goを使用することをお勧めします。これは本当に良いサービスで、少量の電子メール(20日/日)には無料です。

彼らはまた、Djangoのセットアップのチュートリアルがあります。アドバイス@Domenためhttps://www.smtp2go.com/docs/django/

+0

おかげで多くのことを。私が混乱しているのは、あなたが言及したDjangoセットアップチュートリアルのステップ2に、私のアプリケーションでコードを置くべきところです。 私は何とかsmtp2goのステップ2のチュートリアルコードを私のtasks.pyとマージするべきですか?現在の注文/ tasks.pyファイルを質問に追加しました。 私は見つからなかったので、この問題のアドバイスを探してみましたので、今後の進め方についてのもうひとつのヒントが本当にうれしいです。 – ihmemies

+0

はい、これは正しく見えます。 Djangoシェル( 'python manage.py shell')でコードを実行して、電子メールが送信されていることを確認してください。これがうまくいくと、コードをセロリの作業に移してください。 –

+0

もう一度お手伝いいただき、ありがとうございます。私はこの本のtasks.pyでコードの断片をウェブサイトに追加しようとしましたが、それはうまくいかず、どうすればいいか分かりませんでした。フランケンシュタインのコードを質問の部分に追加します。これでもう少し助けになるのはすばらしいことでしょう。 – ihmemies

関連する問題