2016-04-22 10 views
0

何らかのアクションによっては、ユーザーにメールを送信するための信号を使用しています。私の信号の1つでは、複数のユーザーに同じメールを送る必要があります。私の信号はpost_saveです。[recipient_list]私はこれを使用しますinstance.email_list email_listはメールを送信する電子メールアドレスのリストを格納しています。 [email protected], [email protected], [email protected]recipient_listリストの最初のアドレスにメールを送信する

私はEMAIL_HOST = 'smtp.gmail.com'を使用して電子メールを送信するには、電子メールを受信する唯一のユーザーがリストの最初のユーザーであることが問題です。だから私はGmailのアカウントにメールを送信セクションをチェックし、実際にリストのすべてのユーザーに送信された電子メールショーの "to"領域にログインしますが、電子メールは最初のメールアドレスには届きませんリスト。

私はグーグルが多くのメッセージを送信したことを検出した場合、ブロックされている可能性がありますが、同時に5つのメールを送信するだけで、アカウントにはアラートなど何も表示されません。

問題はどうやってメールを送信するのか、またはGmailアカウントの設定を悪くすることですか?

本当にありがとうございます。

私の悪い文法には申し訳ありません。

編集:ここに私のコードです。

forms.py 

class MyForm(forms.Form): 
    userslist = forms.ModelChoiceField(queryset = User.objects.filter(here goes my condition to show the users), empty_label='List of users', label='Users', required=False) 
    emailaddress = forms.CharField(max_length=1000, label='Send to:', required=False) 
    comment = forms.CharField(widget=CKEditorUploadingWidget(), label="Comment:") 

このフォームでは、emailaddressフィールドに電子メールアドレスを選択するユーザーの一覧が表示されます。

views.py 

class mails(TemplateView): 
    def get(self, request, *args, **kwargs): 
     id_user = request.GET['id'] 
     us = User.objects.filter(id = id_user) 
     data = serializers.serialize('json', us, fields=('email')) 
     return HttpResponse(data, content_type='application/json') 

そして、ここで私はemailaddresフィールドを埋めるために使用<script>だ:これは、電子メールアドレスを持って来るために私のAjaxです

<script> 
    $('#id_userlist').on('change', concatenate); 
    function concatenate() { 
     var id = $(this).val(); 
     $.ajax({ 
      data: { 'id': id }, 
      url: '/the_url_to_get_data/', 
      type: 'get', 
      success: function (data) { 
       var mail = "" 
       for (var i = 0; i < data.length; i++) { 
        mail += data[i].fields.email; 
       } 
       var orig = $('#id_emailaddress').val(); 
       $('#id_emailaddress').val(orig + mail + ','); 
      } 
     }) 
    } 
</script> 

私がメールを送信するために使用する信号はこれです:

@receiver(post_save, sender=ModelOfMyForm, dispatch_uid='mails_signal') 
def mails_signal(sender, instance, **kwargs): 
    if kwargs.get('created', False): 
     if instance.emailaddress: 
      #Here goes the code for the subject, plane_message, 
      #from_email and template_message. 
      send_mail(subject, plane_message, from_email, [instance.emailaddress], fail_silently=False, html_message=template_message) 

したがって、4人のユーザーを選択すると、情報はデータベースにこのように保存されます。

data info

アカウントにログインして「送信済みメール」セクションをチェックし、メールの詳細を確認し、4人のユーザーに送信したが、メールを受け取った唯一のユーザーが最初でしたリスト内の

enter image description here

+0

あなたが使用している実際のコードを投稿することができますか?これがないとどこに問題があるのか​​把握する方法はありません。 – solarissmoke

+0

@solarissmokeコードと2つの画像を追加します。 –

答えて

2

あなたの問題は、あなたがinstance.emailaddress[email protected], [email protected], [email protected]など)内の電子メールアドレスのカンマ区切りの文字列を渡しているということです。 Djangoは、カンマ区切りの文字列ではなく、Pythonのアドレスリストを期待しています。最初のカンマの後はすべて無視されます。次のように

はあなたのコードを変更し

、それが動作します:

def mails_signal(sender, instance, **kwargs): 
    if kwargs.get('created', False): 
     if instance.emailaddress: 
      #Here goes the code for the subject, plane_message, 
      #from_email and template_message. 
      recipients = [r.strip() for r in instance.emailaddress.split(',')] 
      send_mail(subject, plane_message, from_email, recipients, fail_silently=False, html_message=template_message) 
+0

それはまさに私の問題だった、ありがとう。 –

関連する問題