teratail header banner
teratail header banner
質問するログイン新規登録
Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

843閲覧

Django send_mailで任意の送信元メールアドレスの設定の仕方。

sbf

総合スコア7

Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/06/27 19:06

0

0

実現したいこと

送信元メールアドレスを任意で設定できるようにしたい。

前提

Djangoのsend_mailでメールお問合せフォームを作っています。

もうほとんどプログラムはできており実行テストをしたら、送信元Fromが宛先と同じメールアドレスになってしまいます。

送信元メールアドレスを任意で設定できるようにしたいのですがどうすればよろしいでしょうか?

settings.pyのEMAIL_HOST_USERで設定したメールアドレスが送信元で固定されているんだと思います。

###ソースコード

forms.py

1from django import forms 2 3class ContactForm(forms.Form): 4 subject = forms.CharField(label='件名', max_length=100) 5 sender = forms.EmailField(label='Email', help_text='ご確認の上、正しく入力してください') 6 message = forms.CharField(label='メッセージ', widget=forms.Textarea) 7 myself = forms.BooleanField(label='同じ内容を受け取る', required=False)

views.py

1from django.shortcuts import render, redirect 2from .forms import ContactForm 3from django.http import HttpResponse 4from django.conf import settings 5from django.core.mail import BadHeaderError, send_mail 6 7 8""" お問い合わせフォーム画面""" 9def contact_form(request): 10 11 if request.method == 'POST': 12 form = ContactForm(request.POST) 13 14 if form.is_valid(): 15 16 subject = form.cleaned_data['subject'] 17 message = form.cleaned_data['message'] 18 sender = form.cleaned_data['sender']#送信元メールアドレス 19 myself = form.cleaned_data['myself'] 20 recipients = [settings.EMAIL_HOST_USER]#宛先 21 22 if myself: 23 recipients.append(sender) 24 try: 25 send_mail(subject, message, sender, recipients) 26 return redirect('complete') 27 except BadHeaderError: 28 return HttpResponse('無効なヘッダーが見つかりました。') 29 30 31 else: 32 form = ContactForm() 33 return render(request, 'contact/contact_form.html', {'form':form}) 34 35 36""" 送信完了画面""" 37def complete(request): 38 return render(request, 'contact/complete.html')

settings,py

1EMAIL_HOST = 'smtp.gmail.com' 2EMAIL_HOST_USER = 'xxx@gmail.com' 3EMAIL_HOST_PASSWORD = 'xxxxxxxxxxxxx 4EMAIL_PORT = 587 5EMAIL_USE_TLS = True

試したこと

ネットの記事でsettings.pyの
EMAIL_HOST
EMAIL_HOST_USER
EMAIL_HOST_PASSWORD
EMAIL_PORT
EMAIL_USE_TLS
を設定しないでsend_mailを使い任意の送信元メールアドレスを設定できている方がいたので私も試したところ右のエラーが起きてしまいダメでした。"ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続でき ませんでした。"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

この回答はGPT-4による自動生成回答です

Djangoのsend_mail関数では、送信元メールアドレスを任意で設定することが可能です。ただし、そのメールアドレスがSMTPサーバーによって許可されている必要があります。SMTPサーバーは、スパムメールの送信を防ぐために、認証されたユーザーからのメール送信のみを許可することが一般的です。

あなたのコードでは、settings.pyで設定したEMAIL_HOST_USER(SMTPサーバーに認証するためのユーザー名)が送信元メールアドレスとして使用されています。これは、SMTPサーバーが認証されたユーザーからのメール送信のみを許可しているためです。

したがって、任意の送信元メールアドレスを設定するには、そのメールアドレスがSMTPサーバーによって許可されている必要があります。具体的には、SMTPサーバーにそのメールアドレスでログインできるように設定する必要があります。

なお、GmailのSMTPサーバーを使用している場合、セキュリティの観点から、Gmailアカウントのメールアドレス以外の送信元メールアドレスを設定することはできません。そのため、GmailのSMTPサーバーを使用して任意の送信元メールアドレスを設定することはできません。

以上の理由から、あなたが試した方法(settings.pyのSMTPサーバーの設定を削除して任意の送信元メールアドレスを設定する)はうまくいかなかったと考えられます。SMTPサーバーの設定を削除すると、DjangoはデフォルトのSMTPサーバー(localhostの25番ポート)を使用しようとしますが、そのサーバーは存在しないか、または接続を拒否したため、ConnectionRefusedErrorが発生したと考えられます。

以上を踏まえて、あなたの要件を満たすための解決策としては、以下の2つが考えられます。

  1. SMTPサーバーを自分で設定し、任意の送信元メールアドレスを許可する。ただし、これにはSMTPサーバーの設定や管理に関する知識が必要です。

  2. 送信元メールアドレスを固定(settings.pyEMAIL_HOST_USERで設定したメールアドレス)にし、メールの本文にお問い合わせ者のメールアドレスを含める。これにより、メールの受信者はお問い合わせ者のメールアドレスを知ることができます。

以上、ご参考になれば幸いです。

投稿2023/06/27 19:07

teratail-ai

Powered by GPT-4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問