2

SendGrid を使用してメールを送信しようとしていますが、HTML 形式のメールを送信すると、必要に応じて HTML をフォーマットするのではなく、HTML タグがメールに表示されます。これが私が送信しようとしているものです:

<html>
<head></head>
<body>
  <p>Hi!<br>
     How are you?<br>
  </p>
</body>
</html>

これが私のコードです:

 def send(self, group=None):
        current_site = Site.objects.get_current()
        domain = unicode(current_site.domain)
        ctx = {
            "group": group,
            "signup_code": self,
            "domain": domain,
        }
        msg = MIMEMultipart('alternative')
        subject = render_to_string("signup_codes/invite_user_subject.txt", ctx)
        msg['subject'] = render_to_string("signup_codes/invite_user_subject.txt", ctx)
        message = render_to_string("signup_codes/invite_user.txt", ctx)
        text = "Hi!\nHow are you?\n"
        part1 = MIMEText(text, 'plain')
        part2 = MIMEText(message,'html')
        msg.attach(part1)
        msg.attach(part2)
        send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [self.email])
        self.sent = datetime.datetime.now()
        self.save()

注:invite_user.txt上記の html が含まれています。

これがHTMLであることを認識せず、それに応じてフォーマットする理由についての洞察はありますか? 何か不足していますか?

4

1 に答える 1

3

デフォルトでは、Django メーラーはメールのテキスト部分のみを送信します。html に設定するか (これは悪い習慣です)、EmailMultiAlternatives クラスを使用する必要があります。だから、これはあなたが本当に探しているものだと思います:

from django.core.mail import EmailMultiAlternatives

def send(self, group=None):
  current_site = Site.objects.get_current()
  domain = unicode(current_site.domain)
  ctx = {
      "group": group,
      "signup_code": self,
      "domain": domain,
  }

  subject = render_to_string("signup_codes/invite_user_subject.txt", ctx)
  text_content = "Hi!\nHow are you?\n"
  html_content = render_to_string("signup_codes/invite_user.txt", ctx)

  msg = EmailMultiAlternatives(subject, text_content, settings.DEFAULT_FROM_EMAIL, [self.email])
  msg.attach_alternative(html_content, "text/html")

  msg.send()

また、組み込みの Django 関数を使用する代わりに、公式の SendGrid python パッケージを検討することをお勧めします。ここでチェックしてください:

https://github.com/sendgrid/sendgrid-python/

于 2013-01-29T22:58:11.347 に答える