質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
Django

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Python

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

4回答

2171閲覧

メール送信をSMTPサーバーを構築せずに行う方法

ruuuu

総合スコア174

Django

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Python

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2021/01/18 02:35

編集2021/01/18 02:36

Django(python)プログラムより、メールを送信する仕組みを考えております。
メール送信する方法を調べていましたら、こちらの方法が該当しましたが、当然かもしれないのですが、メールサーバーが必要とのことでした。
現在検討している方法としましては、メールサーバーをEC2にて一から構築する方法なのですが、その他にもう少し簡単にプログラム内からメール送信を行う方法はないでしょうか。
簡易的にメール送信を行う方法がありましたら、ご助言頂けましたら幸いです。

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

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

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

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

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

guest

回答4

0

メール送信がSMTPに即した形で行われる限り、残念ながらないでしょう。

一応AWS SESやSendGridなどのサービスを使ってWEB API経由でメール送信はできます。
WEB APIでなくて、それらのサービスをSMTP経由で使用することもできます。
それが求める回答かはわかりませんけれど。

ただ、メールサーバ構築するよりは確実に楽です。

投稿2021/01/18 02:58

yu_1985

総合スコア7471

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

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

ruuuu

2021/01/18 04:35

ご回答頂きまして、ありがとうございます。 自分「SMTP」というのがいまいち分かっていないのですが、色々と調査しておりましたら、Gmailを使用した場合でもメール送信を行えることが分かりました。 Gmailの「SMTP」を使用するということはすなわち、Gmailの「WEB API」を使用するとほぼ同じような意味として考えても良いのでしょうか...?
yu_1985

2021/01/18 08:49

> Gmailの「SMTP」を使用するということはすなわち、Gmailの「WEB API」を使用するとほぼ同じような意味として考えても良いのでしょうか...? 両者は全く意味が異なります。 > Gmailの「SMTP」を使用する とは、Gmail側のSMTPサーバを利用することに他なりません。 一方 > Gmailの「WEB API」を使用する とは、Gmailを使用するためのAPIに大してHTTPリクエストを送り、そのリクエストの内容を受けてGmail側がメールを送る、といった動きです。 メールの送信自体がそもそもSMTPというプロトコルで行われるので、どこかしらにSMTPサーバが必要になります。 「残念ながらない」と書いたのは、それを自分で用意するのか、どこかのサービスのSMTPサーバを利用するかの違いだけでSMTPサーバ自体がどこにも介在しないことはありえない、という意味です。 WebAPI経由で送るというのは、どこかしらが提供するメール送信のサービスを、REST APIを経由して行うというだけです。 SMTPサーバを動かすのをWebAPI経由にしているだけで裏側ではどこかしらにSMTPサーバが存在するので、自分からは見えないというだけでSMTPサーバが存在しないわけではないはずです。 メール送信は割とみんな軽視しがちですが、きちんと送信先に届かせることを考えると結構難易度が高いです。 スパムメール判定されにくくするための設定とか。 プログラム上からメール送信を行うならおとなしくAWS SESやSendGridなどのメール送信サービスを利用することを強く推奨します。
ruuuu

2021/01/18 09:36 編集

ご丁寧にご助言下さり、ありがとうございます。 大方、理解することが出来ました。 一旦Gmailでのメール送信プログラムを「https://dev-yakuza.posstree.com/django/gmail-smtp/」こちらを参考にし書いてみたのですが、メールの送信には成功致しました。 > SMTPサーバを動かすのをWebAPI経由にしているだけで裏側ではどこかしらにSMTPサーバが存在するので、自分からは見えないというだけでSMTPサーバが存在しないわけではないはずです。 こちらですが、形としましては、プログラム側でREST APIを経由しGmailのSMTPサーバーへメールを送信するように指令を出し、それを受け取ってSMTPサーバーはメールを送信するといった流れになりますでしょうか? どうも、勝手にGmailのSMTPサーバーを使用するというのはいささか疑問だったのですが、REST API経由ということがありましたら、大方納得がいくのですよね
yu_1985

2021/01/18 09:59

> 形としましては、プログラム側でREST APIを経由しGmailのSMTPサーバーへメールを送信するように指令を出し、それを受け取ってSMTPサーバーはメールを送信するといった流れになりますでしょうか? 裏側については実際のところはGoogleに聞くしかないですが、おそらくはそういう挙動だと思います。 GmailのWEB APIをわざわざ使っているケースは自分は実際に見たことはないですが・・・。 テストで少数のメールを送る程度ならとりあえずGmailでもいいですが、もし実際にサービス上でメール送信を行うとかであれば、Gmailはあまり良い選択肢とは言えません。 たとえば迷惑メール対策として、送信元が不正でないことを証明する手段の一つに送信元(プログラム実行元)サーバのIPやドメインを実際にメール送信を行うドメインの逆引きレコードに登録する、といったものがあるのですが、Gmailのドメインは当然Googleのものなのでそれを行うことはできません。 また、人間以外が多数のメールを送るために使うことをあまり想定されていないようで、送受信に下記のように制限があります。 https://support.google.com/mail/answer/22839?hl=ja 上記のような理由からも、メール送信には何かメール送信サービスを使用することを強く勧めています。
ruuuu

2021/01/18 11:23

詳しく教えて下さり、ありがとうございます。 現在は月に多くとも数件、送信を行う規模を想定していますが、規模が大きくなった際には、SESなどの他サービスを使用することをしっかりと検討したいと思います。
guest

0

こちらを使うのはいかがでしょうか。

Amazon SES(Simple Email Service)

Amazon EC2 でホストされているアプリケーションから Amazon SES を呼び出した場合、月に 62,000 通のメッセージまでは無料で送信できます。この無料利用枠の有効期限はありません。

 
python 環境へのインストール

Terminarl

1(venv~) $ pip install boto django-ses 2 3```  4 5settings.py 6 7```python 8INSTALLED_APPS = [ 9 ・・・ 10 'django_ses', # 追加 11 ・・・ 12] 13 14# Amazon SES関連設定 15AWS_SES_ACCESS_KEY_ID = '***********************' # 環境変数上で指定すべき os.environ.get('AWS_SES_ACCESS_KEY_ID') 16AWS_SES_SECRET_ACCESS_KEY = '*************************' # 環境変数上で指定すべき os.environ.get('AWS_SES_SECRET_ACCESS_KEY') 17EMAIL_BACKEND = 'django_ses.SESBackend'

投稿2021/01/18 02:45

編集2021/01/18 03:05
_whitecat_22

総合スコア1305

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

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

ruuuu

2021/01/18 04:27

ご回答ありがとうございます。 少々調べていたのですが、Gmailを使用することでも実現可能なのでしょうか...? https://techacademy.jp/magazine/22806 djangoでの実装方法もご提示頂いております為、せっかくですので、SESで実装してみたい思いもあるのですが、簡単にGmailで送信が可能ならばこちらでも良いのかなとも思っております。
_whitecat_22

2021/01/18 04:56

Djangoからも可能なはずです。Pythonプログラムに変わりはありませんので、この方法も使えます。 Djangoを動かすサーバーAmazon EC2 とすると思っていましたため、管理も同じマネジメントコンソールから行なえるSESをご提案しましたが、サーバーにより、SES以外も検討してみてください。
ruuuu

2021/01/18 06:37

ご返信頂きまして、ありがとうございます。 >Djangoを動かすサーバーAmazon EC2 こちら、Djangoを動作させるのはAmazon EC2を想定しております。 簡単にGmailを使用し、送信できるのならばGmailで良いと考えていたのですが、SESの方が管理がしやすいと言ったメリットが合った訳なのですね
_whitecat_22

2021/01/18 06:40

同じAWSというだけですけどね ^^;
guest

0

誰かがやっているメールサーバを借りてくる、という方法が考えられます。

AWS内でも、SESやWorkmailなど、メール系のサービスがいくつかあります。

投稿2021/01/18 02:43

maisumakun

総合スコア145208

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

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

0

技術的には、自分所有のSMTPサーバーが無くても、DNSを引いて宛先ドメインのSMTPサーバーのIPアドレスを求め、そこにSMTPプロトコルで直接送りつけることは可能です。
ただ、相手からスパムメールと判定されないための仕組みなど考えないと、送れない相手多数と言うことになります。

「たまたま送れた相手だけ送れれば良い」ということならそれでも良いのですが、AWSを使っていると言うことはおそらく業務利用でしょうから、他の回答の通り、メール送信サービスを使うのが良いです。
独自にSMTPサーバーを立てると言うことも、上記観点からあまりされていないと思います。

投稿2021/01/18 03:48

otn

総合スコア84796

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問