Djangoでメールを送信するには?settings.EMAIL_PORTと代替方法をわかりやすく解説


Djangoのsettings.EMAIL_PORT設定は、メール送信時に使用するSMTPサーバーのポート番号を指定します。適切なポート番号を設定しないと、メール送信が失敗する可能性があります。

設定方法

settings.pyファイルに以下の設定を追加します。

EMAIL_PORT = 587

この例では、ポート番号を587に設定しています。これは、TLS暗号化を使用したSMTP通信に一般的に使用されるポート番号です。

  • 使用するSMTPサーバーによっては、異なるポート番号が必要になる場合があります。詳細は、SMTPサーバーのドキュメントを参照してください。

Gmailを利用する場合の設定例

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'your_password'


from django.core.mail import send_mail

def send_welcome_email(user):
    subject = 'Welcome to My Website!'
    message = 'Hi ' + user.username + ', \n\nWelcome to My Website! We are so excited to have you here. \n\nTo get started, please visit your account page: ' + user.get_absolute_url() + '\n\nSincerely, \nThe My Website Team'
    send_mail(subject, message, '[email protected]', [user.email], fail_silently=False)

このコードは、新規ユーザー登録時に登録されたメールアドレスにウェルカムメールを送信します。

  1. from django.core.mail import send_mail:Djangoのメール送信機能をインポートします。
  2. def send_welcome_email(user)userオブジェクトを受け取るsend_welcome_email関数を作成します。
  3. subject = 'Welcome to My Website!':メールの件名を定義します。
  4. message = 'Hi ' + user.username + ', \n\nWelcome to My Website! We are so excited to have you here. \n\nTo get started, please visit your account page: ' + user.get_absolute_url() + '\n\nSincerely, \nThe My Website Team':メールの本文を定義します。
  5. send_mail(subject, message, '[email protected]', [user.email], fail_silently=False)send_mail関数を使用してメールを送信します。
    • subject:メールの件名
    • message:メールの本文
    • '[email protected]':送信者メールアドレス
    • [user.email]:受信者メールアドレス
    • fail_silently=False:エラーが発生した場合に例外を発生させる
  • このコードはあくまで一例であり、実際の用途に合わせて変更する必要があります。


TLS暗号化による通信

近年では、メール送信時のセキュリティ強化のため、TLS暗号化を使用した通信が推奨されています。settings.EMAIL_PORTと併用することで、安全なメール送信を実現できます。

設定方法

EMAIL_PORT = 587
EMAIL_USE_TLS = True

STARTTLSによる暗号化

SMTPサーバーによっては、初期通信は非暗号化で行い、その後STARTTLSコマンドを用いて暗号化に切り替える方法もサポートされています。この方法では、settings.EMAIL_PORTとは別に、以下の設定が必要となります。

設定方法

EMAIL_PORT = 25
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

カスタムポートの使用

一部のSMTPサーバーは、標準とは異なるポート番号で通信を提供している場合があります。このような場合は、settings.EMAIL_PORTにそのポート番号を設定します。

設定方法

EMAIL_PORT = 465  # 例:Gmailの場合

上記以外にも、以下のような代替方法が存在します。

  • 独自のメール配信サーバーを構築する
  • SendGridなどのメール配信サービスプロバイダを利用する
  • Amazon SESなどのクラウドベースのメール配信サービスを利用する

代替方法の選択

適切な代替方法は、利用するSMTPサーバーやメール送信の要件によって異なります。

  • 完全な制御が必要な場合は、独自のメール配信サーバーを構築するという選択肢もあります。
  • 大量なメール配信を行う場合は、クラウドベースのメール配信サービスやメール配信サービスプロバイダの利用を検討しましょう。
  • 特定のSMTPサーバーを使用する場合は、そのサーバーが提供するポート番号を設定する必要があります。
  • セキュリティを重視する場合は、TLS暗号化またはSTARTTLSによる暗号化がおすすめです。