見出し画像

検知メールをGmailで送信(Pythonでやってみる編)

前回の記事(検知メールをGmailで送信)で、LiveCapture3の検知メールをGmailで送信する方法を書きましたが、今回はPythonのプログラムでGmailを使ってメール送信してみます。

メール送信の仕組み

メールは、送った人の端末から受信する人の端末へ直接送られているわけではありません。

メールアプリ(Outlookなど)でメールサーバに送信指令を出し、それを受けたメールサーバーが、宛先のメールサーバーにメールを届けます。

相手が受信したメールを見る場合は、メールサーバにメールアプリ(Outlookなど)で接続して、送られてきたメールを受信する形です。

メール送信の仕組み

メールの送信には、SMTP(Simple Mail Transfer Protocol)というプロトコルが使用されます。

ちなみに、このSMTPは、送信者(メール送信プログラム)と送信メールサーバとの間だけでなく、送信メールサーバーと、宛先の受信メールサーバーとの間でも使用されます。

受信者(メール受信プログラム)がメールサーバーからメールを受信するときは、POPまたはIMAPというプロトコルが使用されます。

では、今回はこのSMTPを使用して、メール送信サーバーにGmailサーバを使用するメール送信プログラムを、Pythonを使って作成してみます。

Pythonコード

PythonでGmailをメール送信サーバとして使用してメールを送信するプログラムのサンプルは探すと山のように見つかりますが、現在のGmailサーバーには接続できないものも多くあります。

下記は2023/4現在、Gmailサーバに接続できるサンプルになります。

ポイントは以下です。

smtplib.SMTPで接続

サーバーと接続後に暗号化を有効にする(TLSに切り替える)STARTTLSを使用する為に、一旦素のSMTPで接続した後に、connection.starttls()でSTARTTLSを有効にします。
SMTP over SSLで接続するには、smtplib.SMPT_SSL("smtp.gmail.com", 465)で接続してください。(その場合、connection.starttls()をコールするとエラーになります)

loginのパスワードは、アプリパスワードを使用する

connection.login()で指定するパスワードは、通常のGoogleアカウントパスワードではなく、生成したアプリパスワードを使用します。
アプリパスワードの生成方法は前回の記事を参照してください。

送信元アドレス(From)はloginのアドレスに置き換えられる

connection.sendmail()で、FROMアドレスを、Gmailアドレスとは別の物を指定してもメールは届きましたが、届いたメールでは、FROMアドレスが、login()で指定したユーザID(Gmailアドレス)に置き換わっていました。
恐らくなりすまし防止の対応だと思いますが、、、

さいごに

最近のGmailやMicrosoft Exchangeなどは、サーバへのログインにSMTP-AUTHも使えなくなってきており、OAuth認証が必要な状況になってきています。

TLSもTLS1.0/1.1は非推奨になり、クラウド事業者含めてTLS1.2以上への移行が必須になってきています。

セキュリティが上がるのは喜ばしいことですが、開発者としてはこうした状況を追いかけていく必要があり、まあ、大変ですね。。。


この記事が気に入ったらサポートをしてみませんか?