diadia

興味があることをやってみる。自分のメモを残しておきます。

sendgridに関わるメモ

メモ

さくらVPSからsendgridを使うとお得。
https://vps-news.sakura.ad.jp/sendgrid1/

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にして試してみる。試した結果無事に改行が反映された文面でメールを送ることができました。