2016-04-22 15 views
0

Ich benutze Signale, um E-Mails an die Benutzer abhängig von einigen Aktionen zu senden. In einem meiner Signale muss ich die gleiche Mail an mehrere Benutzer senden, verwenden mein Signal post_save so für den Parameter [recipient_list] Ich benutze diese instance.email_list email_list ist, wo ich die Liste der E-Mail-Adressen speichern, um die Mail zu senden, werden sie in diesem Format gespeichert [email protected], [email protected], [email protected].recipient_list E-Mail nur an die erste Adresse in der Liste senden

Zum Senden der E-Mails, die ich verwende EMAIL_HOST = 'smtp.gmail.com' das Problem ist, dass der einzige Benutzer, der die E-Mail erhalten, der erste in der Liste ist. Also logge ich mich im Google Mail-Konto ein, um den Abschnitt zum Senden von E-Mails zu überprüfen, und zeigt im E-Mail-Bereich an, dass die E-Mails an alle Nutzer in der Liste gesendet wurden Die Liste.

Ich lese, wenn Google erkennt, dass das Konto eine Menge Nachrichten sendet blockiert werden könnte, aber nur wie 5 E-Mails zur gleichen Zeit senden und wenn ich im Konto bin, zeigt mir nie eine Warnung oder etwas.

Also das Problem ist, wie ich die E-Mails senden oder vielleicht eine schlechte Konfiguration des Google Mail-Kontos?

Jede Hilfe wird wirklich geschätzt.

Entschuldigung für meine schlechte Grammatik.

EDIT: Hier ist mein Code.

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:") 

, die eine Liste von Benutzern angezeigt bilden die E-Mail-Adresse in das Feld, um die gewünschten Werte Emailadresse zu speichern. Das ist meine Ajax die E-Mail-Adresse zu bringen:

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') 

Und hier ist die <script> ich das emailaddres Feld zu füllen verwenden:

<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> 

Das Signal Ich benutze die Post dies zu senden:

@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) 

Also, wenn ich 4 Benutzer wählen die Informationen in der Datenbank auf diese Weise sparen:

Dann logge ich mich im Konto ein, um den Abschnitt "Gesendete E-Mails" zu prüfen und die Details der E-Mails zu überprüfen, die an die vier Benutzer gesendet wurden, aber der einzige Benutzer, der die E-Mail empfangen hat, war der erste In der Liste.

enter image description here

+0

Können Sie den eigentlichen Code schreiben Sie verwenden? Es gibt keine Möglichkeit herauszufinden, wo das Problem ohne dieses Problem ist. – solarissmoke

+0

@solarissmoke Ich füge den Code und zwei Bilder hinzu. –

Antwort

2

Ihr Problem ist, dass Sie eine durch Kommata getrennte Reihe von E-Mail-Adressen innerhalb instance.emailaddress ([email protected], [email protected], [email protected] usw.) sind vorbei. Django erwartet eine Python-Liste von Adressen, keine durch Komma getrennte Zeichenfolge. Es ignoriert einfach alles nach dem ersten Komma.

Ihren Code wie folgt ändern und es wird funktionieren:

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

Das war genau mein Problem, vielen Dank. –