pythonでメールを送信してみる

pythonでメールを送信してみる

参考元：https://kinsta.com/jp/blog/smtp-port/#what

pythonには、メールの送受信を扱うモジュールが用意されている
emailとsmtplibモジュールを使用してメール送信を試してみる。


SMTPポートとは
（簡易メール転送プロトコル）の略で、インターネット上のメールを転送するための標準的なプロトコル。メールサーバーがインターネット上で送受信をするのにこれを使用する。
例えば、あなたがメールを送る時、あなたの利用しているメールクライアントは送信用のメールサーバーにメールをアップロードする手段が必要となります。その後、そのメールサーバーはメールの受取人の受信用のメールサーバーへメールを転送する手段が必要となります。メールサーバーは、表面上はユーザーに分かりやすいドメイン名が表示されつつ、実際のコミュニケーションは222.501.285.45といったIPアドレスで行われるという点では、ウェブサイトのサーバーとよく似ています（さらに詳しい仕組みが知りたいという方はDNS（ドメイン・ネーム・システム）の基本に関する記事をご覧ください）。
「ポート」はコンピューター同士（メールサーバー同士）が互いにコミュニケーションを取るためのもう一つの手段です。
* IPアドレスはコンピューターを識別します。
* ポートはSMTPなど、そのコンピューター上で動作している特定のアプリケーション/サービスを識別します。
もう少し分かりやすいように例を用いてご説明します。
IPアドレスはオフィスビルが位置する通りの名前を示します。ポートはそのオフィスビルの中の特定の会社を示す数字です。
その会社に何かを配送したい場合、そのオフィスビルの住所だけではなく、オフィスビルの中の正しい場所に届くよう、会社名まで指定する必要があります。
IPアドレスの割り当てなどを担う組織であるIANA（インターネット割当番号公社）は、SMTPを含め、一般的なインターネットサービスのポート番号の登録も担当しています。

SMTPが重要な理由

SMTPサーバーに接続したい時、IPアドレスとポート番号の両方を入力する必要がある。しかし、一般的なSMTPポートは複数存在しその全てがどんな状況でも使用できるとは限らない。
例えば、メールサーバー間でメッセージのやり取りをするための標準的なSMTPポートである25番ポートは、しばしばISPやクラウドプロバイダー（Kinstaでも使用しているGoogle Cloud Platformを含む）にブロックされてしまいます。
このように、多くのサービスが25番ポートをブロックしているため、このポートを使用してSMTPサーバーに接続しようとすると問題が発生することが多いのです。

目的に応じたポート
上記を別としても、それぞれのSMTPポートには異なる目的が存在する。
SMTPの伝達には２つの段階がある。

サブミッション- 送信する側のメールサーバーにメールのメッセージを送るプロセス。例えばAplle Mailでメールを送る時、メッセージは送信側のメールサーバーに送られる必要がある。

* リレー– 2つのサーバー間でメッセージを転送するプロセスです。送信側のメールサーバーにメールが送られた後、そのメールサーバーは受取人のメールサーバーにメッセージを転送します。
メールクライアントもしくはWordPressサイトの設定をする場合、上記のうち主に「サブミッション」のプロセスについて気になるところでしょう。
「リレー」のプロセスがSMTPの重要な部分であることは間違いありませんが、多くの場合、自分のメールサーバーでの設定は不要です。


SMTPで使用されるポート

現代のインターネット上に存在するSMTPポートは1つではありません。一般的なSMTPポートは4つあります。
* 25
* 587
* 465
* 2525
それぞれ見ていきましょう。

25番ポートの用途

25番ポートは1982年に作られたポートでSMTPポートの中で一番古いものです。
25番ポートは今でも標準的なSMTPポートとして知られていて、主にSMTPリレーに使用されます。
しかし、多くのISPやクラウドホスティングプロバイダーが25番ポートをブロックしていることから、WordPressサイトやメールクライアントのSMTPを設定する際は25番ポートを使わない方が良いでしょう。
これは、25番ポートは感染したコンピューターからスパムメールを送信するのに悪用されることが多いからです。
まとめ：SMTPのサブミッションとリレーのプロセスには違いがあります。25番ポートはリレーには適していますが、サブミッションには使用しない方が良いでしょう。

587番ポートの用途

587番ポートは現代のインターネット上ではSMTPサブミッションに用いるデフォルトのポートとなっています。他のポートを使用することもできますが（詳しくは後ほどご紹介します）、まずは587番ポートをデフォルトで設定し、ほかのポートはやむを得ない場合（使用しているホスティングサービスがなんらかの理由で587番ポートをブロックしている場合など）のみ使用するようにしましょう。
587番ポートはTLSもサポートしているため、安心してメールを送信できます。

465番ポートの用途

465番ポートはもともとSMTPS（SSL over SSL）に割り当てられていました。その後しばらくして、別の用途に割り当てられた後、非推奨となりました。
しかし、多くのISPやクラウドホスティングプロバイダーは今でもSMTPサブミッションに465番ポートをサポートしています。

2525番ポートの用途

2525番ポートは（IETFやIANAに認証された）正式なSMTPポートではありません。しかし、587番ポートの代替手段としてSMTPサブミッションによく利用されるポートで、多くのISPやクラウドホスティングプロバイダーもこのポートをサポートしています。
587番ポートがブロックされている場合、2525番ポートを代わりに使うと良いでしょう。

どのSMTPポートを使用すべきか

この問いへの答えについては既に触れてきましたが、非常に重要な点なので改めて正しいSMTPポートの選び方を確認しましょう。
SMTPでメールを送信するためにWordPressサイトやメールクライアントを設定する場合、まずは587番ポートを選択しましょう。これはサブミッション用のデフォルトのSMTPポートであり、TLSを用いた安全な伝達に対応しています。
何らかの理由により587番ポートがブロックされている場合は2525番ポートを代わりに使用するのが一般的です。このポートは正式に認証されたSMTPポートではありませんが、一般的に使われているポートで、多くのプロバイダーがサポートしています。
多くのプロバイダーが今でも465番ポートをサポートしていますが、今では推奨されていないスタンダードなので、465番ポートを使用する前にまずは587番ポート、もしくは2525番ポートを使用しましょう。
最後に25番ポートはSMTPリレーには一般的に使用されますが、多くのISPやクラウドホスティングプロバイダーはこのポートをブロックしているため、メールクライアントやWordPressサイトの設定を行う際には使用してはいけません。

まとめ
SMTPはインターネット上のメールの送受信において重要な役割を果たします。
WordPressサイトのトランザクションメールが正しく配信されるようにするためには、SMTPでメールを送信できるような設定をWordPressで行うことができます。また、Apple MailやOutlookなどのメールクライアントを使用する場合、送信メールをメールサーバーへ送信するのにSMTPが使用されます。
WordPressサイトやメールクライアントをSMTPサーバーに接続するにはSMTPポートの入力が必要となります。
一般的なSMTPポートは4つあります。
* 25
* 587
* 465
* 2525
25番ポートはSMTPリレーに一般的に使用されますが、多くのプロバイダーはこのポートをブロックしているので、SMTPサブミッションには使用してはいけません。
WordPressサイトやメールクライアントでSMTPの設定を行う場合は、まずはSMTPサブミッションの標準的なポートである587番ポートを選びましょう。
587番ポートで接続できない場合は、2525番ポートを試してみましょう。公式なSMTPポートではありませんが、広くサポートされているポートであり、安全な伝達のためにTLSが使用されています。