2014-12-29 3 views
0

저는 장고를 처음 사용하고 장고에서 첫 번째 응용 프로그램을 보았습니다. 특정 사용자 이벤트에 대한 전자 메일을 보내고 있습니다. 이메일 전송을 위해 SendGrid API를 사용하고 있습니다. 나는 나를 위해 일하는 단일 사용자에게 전자 메일을 보내려면 다음 코드를 작성했습니다. 한 번에 여러 사용자에게 이메일을 보내려고합니다. 나는 또한 사용자를위한 테이블을 가지고있다. 나는 의 목록에서 모든 사용자의 데이터베이스를 가져 와서 한 번에 이메일을 보내야합니다.Send Grid APis를 통해 여러 사용자에게 전자 메일을 보내십시오.

저는 방금 장고를 배우기 시작했고, 장고 옴에 대해 거의 지식이 없습니다.

다음은 HTML 제목을 통해 사용자의 메시지 제목과 내용을 가져 와서 단일 사용자에게 보내는 기능입니다. 지금은받는 사람 이메일을 하드 코딩했습니다.

def send_message(request): 
    Message_Subject = str(request.POST.get('Subject')) 
    Message_Content = str(request.POST.get('Content')) 
    Message_Type = str(request.POST.get('optionsRadios')) 
    Message.objects.create(MessageSubject= Message_Subject, MessageContent=Message_Content) 
    sg = sendgrid.SendGridClient(settings.SENDGRID_USERNAME, settings.SENDGRID_PASSWORD) 
    message = sendgrid.Mail() 
    message.add_to('[email protected]') 
    message.set_subject(Message_Subject) 
    message.set_html(Message_Content) 
    message.set_text(Message_Content) 
    message.set_from('Emailer System <[email protected]>') 
    status, msg = sg.send(message) 
    if status == 200: 
     messages.success(request, 'Your email was successfully sent.') 
    else: 
     messages.error(request, msg) 
    return render_to_response('send_message.html', context_instance=RequestContext(request)) 

다음은 각 이메일에 대한 add_to 전화를 시도 할 수 django.db 수입 모델

class Users(models.Model): 
    UserID = models.IntegerField(verbose_name='User ID',max_length=255,primary_key=True,blank=True) 
    UserName = models.CharField(verbose_name='User Name',max_length=254,null=True,blank=True) 
    Email = models.EmailField(verbose_name='Email',max_length=254,null=True,blank=True) 
    Phone = models.CharField(verbose_name='Phone Number',max_length=254,null=True,blank=True) 

class Message(models.Model): 
    MessageID = models.AutoField(verbose_name='Message ID',primary_key=True) 
    MessageSubject = models.CharField(verbose_name='Subject',max_length=255,null=True,blank=True) 
    MessageContent = models.TextField(verbose_name='Content',null=True,blank=True) 
    MessageType = models.CharField(verbose_name='Message Type',max_length=255,default='Email',null=True,blank=True) 

class Log_Messages(models.Model): 
    LogID = models.AutoField(verbose_name='Log ID',primary_key=True) 
    MessageID = models.ForeignKey(Message,verbose_name='Message ID',null=True, blank=True) 
    UserID = models.ForeignKey(Users,verbose_name='User ID',null=True, blank=True) 
    Status = models.BooleanField(default=False) 
    SentDateTime = models.DateTimeField(default=datetime.now(), blank=None, null=None) 
+0

message.add_to은 ('[email protected] ') u는, [ "[email protected]", "[email protected]"와 같은 이메일 주소의 목록을 통과를 시도 할 수 있습니다 .. .] 위의 진술에. 이메일을 보내기 위해 python lib 인 smtplib이 나를 위해 일하고 있습니다. –

답변

0

에서 내 model.py 파일

입니다.

... 

message = sendgrid.Mail() 
user_emails = Users.objects.filter(is_active=True).values_list('email', flat=True) 

for email in user_emails: 
    message.add_to(email) 

message.set_subject(Message_Subject) 
... 
2

당신이해야 할 일은 이메일을 루프로 보내고 데이터베이스에서 읽는 것입니다. 사용자 입력을 처리 할 때 django와 함께 제공되는 api 양식 (설명서의 Working with Forms 참조)을 사용하면 편리합니다.

다음은 시작하는 데 도움이되는 완전한 예입니다.

모델 Recipient은 최종 사용자입니다.

class Message(models.Model): 
    subject = models.CharField(max_length=200) 
    content = models.TextField() 
    mtype = models.CharField(max_length=1, choices=(('1','Normal Message'), 
                ('2','Other Message'),)) 
class Recipient(models.Model): 
    email = models.EmailField() 
    message = models.ForeignKey(Message) 
    delivered = models.BooleanField(default=False) 
    status = models.CharField(max_length=200, blank=True, null=True) 

다음 단계는 메시지 모델에 대한 양식을 작성하는 것입니다 : 당신이 메시지 당받는 사람 각각 전달의 상태를 기록 할 수 있도록 나는 또한 메시지에 연결했다. 이것을 views.py에 넣을 수는 있지만, 규약은 forms.py이라는 새 파일을 만들어 거기에 넣는 것입니다.

from .models import Message 


class MessageForm(forms.ModelForm): 
    class Meta: 
     model = Message 

지금보기에, 메시지를 수집하기 위해 양식을 사용하는 전송하고, 다음 루프를받는 사람을 통해 각각의 메시지를 보내 : 당신이 당신의 모델을 가져올 수 있는지 확인합니다. 각 배달 상태는받는 사람 모델과 함께 기록됩니다.

마지막으로 게시 요청이므로 사용자를 리디렉션해야합니다 (페이지를 다시로드하지 않음).

def send_message(request): 
    form = MessageForm(request.POST or None) 
    if form.is_valid(): 
     data = form.save() # This the new message object that was 
          # saved from the data in the form. 

     sg = sendgrid.SendGridClient(settings.SENDGRID_USERNAME, 
            settings.SENDGRID_PASSWORD) 

     for user in Recipient.objects.all(): # Loop through all users. 
      message = sendgrid.Mail() 
      message.add_to(user.email) # Fetch the email address for each user. 
      message.set_subject(data.subject) 
      message.set_html(data.content) 
      message.set_text(data.content) 
      message.set_from('Django Mailer <[email protected]>') 
      status, msg = sg.send(message) 
      if status == 200: 
       user.received = True 
      else: 
       user.received = False 
      user.message = data # Log which message was sent to this user 
      user.status = msg # Log any error message from Sendgrid 
      user.save() 
     return redirect('/thank-you/') # Redirect to some thank you page. 

    return render(request, 'form.html', {'form': form}) 
+0

메시지 모델, 양식 및 기능에 대한 귀하의 논리를 이해합니다. 그러나 수신자 모델을 이해하지 못했습니다. 그 역할이 무엇인지 설명해 주시겠습니까? –

+0

업데이트 된 질문을 살펴보십시오. 모든 정보가 저장된 사용자 테이블이 있습니다. 이제는 관리자가 입력 한 메시지를 가져 와서 테이블의 각 사용자에게 전송하고 이러한 메시지에 대한 로그를 유지하려고했습니다. 나는 asp.net에서이 일을했지만 장고 처음으로 그래서 내 첫 번째 응용 프로그램에서 몇 가지 도움/지침이 필요합니다. –

+0

받는 사람 모델은 전자 메일 주소를 저장하고 각 전자 메일 주소에 대해 오류 메시지와 함께 메시지 및 배달 상태에 대한 링크를 저장합니다.그것은 전송을위한 로거 역할을합니다. 분명히 내가 준 예제에서 나머지를 찾을 수 있다고 생각하니? 당신이 갖고있는 특정 질문이 있습니까? –

관련 문제