diadia

興味があることをやってみる。独学で勉強しています。初心者から始めたので困ったことを書いて同じ境遇の方のヒントになればと思います。

sendgridに関わるメモ

メモ

https://simpleit.rocks/python/django/adding-email-to-django-the-easiest-way/

上記リンクについて補足 
djangoのメール送信はsend_mailで送信できるが、sendgridを使う場合当該ライブラリをインストールしてsettings.pyを指定の通りに変更するだけでsendgridからメールを送信する状態に切り替えることができる。

どうやってメモ本文をhtml形式にして表示させることができるのか

 

ホワイトリストとは

https://salt.iajapan.org/wpmu/anti_spam/universal/measure/whitelist-blacklist/
メール受信の選別基準のようだ。受信するか否かの判断をブラックリスト,ホワイトリストで定めるようだ。ホワイトリストは指定した人からのみメールを受信する構造でブラックリストは指定された人からのメールは受信しないようにする構造らしい。

 

メールの見出し字大きさ指定とかしたい場合

まずdjangoにはメール送信に関わるスクリプトが準備してある。メールを送信するならsend_mail()関数を利用すれば良い。djangoのsend_mail()関数の引数の本文は文字列なので、いろいろ細工したいときには不都合だと感じた。
そこでいかなる方法を取れば単なる文字列から細工した状態に、もっと欲を言えば、htmlを反映したメール本文を表示できるか調べてみる。

考えられる方法として引数にhtmlファイルを渡すという方法が考えられる。方法としてsendgridにテンプレートを作り、それを送信する。引数にjsonのデータを使うことでテンプレート内容も編集可能のようだ。下記参照。

https://qiita.com/kikutaro/items/6513acd7420ee88839e9

その他の方法としてrender_to_string関数を用いるとテンプレートにカスタマイズできるようだ。下記参照
https://narito.ninja/blog/detail/64/
https://docs.djangoproject.com/ja/2.2/topics/templates/#django.template.loader.render_to_string

from django.template.loader import render_to_string
from django.core.mail import send_mail

subject = "件名"
context = dict()
context["client_name"] = client.name
context["orderId"] = orderId
template = "orders/mails/order_cofirm.txt"
message  = render_to_string(template,context)
recipient_list = []
recipient_list.append(client.email)
send_mail(subject, message, from_email, recipient_list)

変数templateはdjangoでテンプレートを指定するやり方で指定する。これはrender_to_strung関数の動きがテンプレート探索の方法をとっているからだ。つまり上記の変数templateを定めるならばorder_confirm.txtのパスは以下になる。project/orders/templates/orders/mails/order_confirm.txt

 

sendgridで改行コード"¥n"を使いたい

https://stackoverflow.com/questions/38158192/unable-to-get-a-single-linebreak-while-sending-email-through-sendgrid/38159026

上記によるとsendgridの仕様による影響で改行コードが反映されていないようだ。これについては以下を見るともっと分かりやすい。

https://qiita.com/Sekky0905/items/955a73e51ceb1671d4af

sendgridの仕様では、string型の文字列からhtmlに変換したものをメールとして配信するようだ。
”””Turn on if you don't want to convert your plain text email to HTML”””settings/mail settings/ plain content参照。 自分の設定もoffになっていたのでonにして試してみる。試した結果無事に改行が反映された文面でメールを送ることができました。