Djangoでは組み込みでグループモデルがついていますが、特定のグループに所属するユーザーにだけメールを送りたい、というケースはあると思います。
今回はグループ名を指定してメールの送信リストを作成する方法について記事を書いていきます。
まずはグループを作成していきましょう。
管理画面からパッショーネ
というグループを作成します。
パーミッションは今回は何も選択しないで、名前だけ入れて保存します。
次に作成したグループをユーザーに割り当てていきましょう。
ユーザーの一覧はこのようになっています。
ブローノ・ブチャラティ
とナランチャ・ギルガ
に先ほど作成したグループパッショーネ
を割り当てていきます。
ブチャラティとナランチャのメールアドレスはそれぞれbuccellati@jojo.com
、narancha@jojo.com
という風に設定しています。
ブチャラティを選択しますと、下のように先ほど作成したグループが表示されています。
パッショーネをクリックして、右矢印を押すと下のようになります。
これで選択された状態になりましたので、保存をしましょう。
ナランチャも同様にグループを設定します。
後はviews.py
内にグループ一覧を取得する処理を書いていきます。
手順としては以下のような感じです。
from django.core.mail import EmailMessage
from django.contrib.auth.models import Group,User
...他省略
def 何らかのタイミング():
# メール送信リストの空のリストを作成
bcc = []
# groupの一覧を取得
groups = Group.objects.all().values()
group_id = ''
# group名からメールを送りたいグループの名前を取得
for group in groups:
if group.get('name') == 'パッショーネ':
group_id = group.get('id')
if group_id:
# userオブジェクトをgroup_idでフィルタリング
users = User.objects.filter(groups=group_id)
for user in users.values():
# 一人ずつ送信リストに加える
bcc.append(user.get('email'))
subject = 'Kenmei'
message = 'messagemessage'
from_email = settings.DEFAULT_FROM_EMAIL
email = EmailMessage(subject, message, from_email, [], bcc)
email.send()
試しにbccをprintしてみましょう。
print(bcc)
>>>
['buccellati@jojo.com', 'narancha@jojo.com']
割り当てたブチャラティとナランチャのメールアドレスが設定されていますね。
よくやるのが、何らかの投稿や更新がされた際にメールを送るということかと思います。
その場合はform_valid関数の中に記述すると良いでしょう。