https://docs.djangoproject.com/en/1.4/topics/email/#the-emailmessage-class
これは、電子メールを送信するためのよりジャンゴ的な方法です。
# attempt to send out a welcome email
try :
t = loader.get_template('email_templates/membership/register.html')
c = Context({
'user' : user,
'site' : Site.objects.get(id=settings.SITE_ID)
})
msg = EmailMessage('Welcome to Site', t.render(c), settings.EMAIL_HOST_USER, to=[user.email,])
msg.content_subtype = "html"
msg.send()
except :
messages.info(request, _(u'Our email servers are encountering technical issues, you may not recieve a welcome email.'))
私のsettings.pyで:
import os
EMAIL_HOST_USER = os.environ['SENDGRID_USERNAME']
EMAIL_HOST= 'smtp.sendgrid.net'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_PASSWORD = os.environ['SENDGRID_PASSWORD']
注: SENDGRID_USERNAME と SENDGRID_PASSWORD は、heroku アドオンによって環境変数として追加されます。設定ファイルに実際の資格情報が埋め込まれている場合がありますが、これは問題ありません。
では、なぜメールで例外がスローされないのでしょうか? https://docs.djangoproject.com/en/1.4/topics/email/#django.core.mail.get_connection
fail_silently 引数は、バックエンドがエラーを処理する方法を制御します。fail_silently が True の場合、メール送信プロセス中の例外は黙って無視されます。