【無料・簡単・安全】Pythonでメールを送ってみよう


 【無料・簡単・安全】Pythonでメールを送ってみよう

何かと自動化を手伝ってくれる Python プログラム。

例えば 「株価が 1% 上がったら自分に通知メール・・・・・」 とか 「ジモティーで気になってた商品が安くなったら通知メール・・・・・」とか。

データ変化を自動的に検知してくれて、 通知メール・・・・・ してくれたら便利ですよね。

そんな訳で今回は、基本となる "Python でメールを送る" というところまでご紹介していきたいと思います。

目次
  1. 【無料・簡単・安全】Pythonでメールを送ってみよう
  2. Pythonでメールを送る様子の動画(4分)
  3. Pythonでメールを送る方法の種類
  4. メールサービスの選定
  5. Pythonでメール送信
  6. まとめ

【無料・簡単・安全】Pythonでメールを送ってみよう

Pythonでメールを送る様子の動画(4分)

本稿でご紹介する内容の動画です。4 分ぐらいで Python からメール送信できていますね。

Pythonでメールを送る方法の種類

image

  • Python標準モジュール
  • メールサービスの利用
  • APIサービスの利用

Pythonでメールを送る方法は 1つではなく、上記のように大きく分けて 3種 ほどあります。

1番目の "Python モジュール" については、 Qiita などでもよく紹介されていますが 「smtplib」 という Pythonモジュールを使用するパターン。特別ライブラリなどを pip install しなくてもいいという特徴はありますが、 port 番号などの設定が必要に。 「smtplib & Gmail」 を使ったサンプルチュートリアルはたくさんありますが、 Google アカウントのパスワード入力が必要で、セキュリティ的に...という方も。 Pythonモジュールを使ってメールを送ることは簡単かもしれませんが、セキュリティ的な面で今回はパスします。

2番目の "メールサービス" については、 Python でメールを送ることに加えて 「HTMLメール」 が送れたり、 「開封したかどうか?」 などマーケティング的な機能も持ったサービス。有名ドコロで "SendGrid" や "Mailgun" など。今回はこちらの "メールサービス" を使って、 Python でメールを送信したいと思います。

3番目の APIサービス は、 "Rakuten Rapid API" などの API サービスを利用した方法。こちらはたくさんのメール API を知ることができますが、 Python 初心者にとってはわかりにくい操作内容。上級者向けのサービスと言えます。

以上をまとめると以下のようになるでしょう。

Pythonでメールを送る方法の比較表
安全性 コスト 操作感 送信量 機能
Python標準モジュール
メールサービスの利用
APIサービスの利用

メールサービスの選定

image

今回は "メールサービス" の無料利用枠を使って、自動的にメールを送りたいと思いますが、 "メールサービス" 調べてみると結構種類があります。

・ SendGrid
・ Mailgun
・ mailjet
・ sendinblue
・ AWS SES

それぞれ "メール送信方法" や "無料で送れる量"、 "送った時のメールアドレス"、 "管理画面" 等が違ってきます。 メールを送るニーズによってもサービス選定のポイントは違ってくると思いますが、今回は "プライベート" & "無料" & "使いやすい" というところにポイントを絞って選定。

あとはじめて利用する時は、やっぱり人気のあるサービスが無難、って感じですよね。 サービスの利用状況については、 APIサービス が参考になります。

image

RapidAPI より

一番人気は SendGrid ですね、こちらのサービスについては "CrowdWorks社" や "WANTEDLY" などの有名サービスも利用中。無料で送信できるメール量は月間 100通 とちょっと少ないですが、 Gmail でも Yahoo!メール でもアカウントのパスワードを入力しなくてもメールを送ることができます。つまりとってもセキュア。

次に人気の Mailgun も使ってみましたが、こちらはメール送信のために "ドメイン" が必要になります。 Mailgun側の設定とドメイン側の設定、と設定箇所が増え操作量が増えるために今回は辞めました。その他のサービスも特有の操作方法でメールを送れますが、今回は人気度が高い SendGrid を選択。

Pythonでメール送信

今回はメールサービスの "SendGrid" を利用するわけですが、 "SendGrid" 2つあります。 1つは 「本家SendGrid」、もう 1つは 「構造計画研究所」 が運営する SendGrid。

2つのSendGrid
本家SendGrid 日本のSendGrid

両方のサービスでアカウントを作ろうとしましたが、 構造計画研究所の方は "審査" があります。そのため即 SendGrid を利用できない状況。

以上のことから今回は 「本家SendGrid」 を使ってメールを送ってみたいと思います。

Freeプランは 構造計画研究所 の方が 月 12000 と 本家の月 100 よりも多いです。


image

https://sendgrid.com/

本家SendGrid にアカウント(Free Plane)を作成して、ログインした画面が上図。まずは SendGrid を使ってメール送信しようと思うと API が必要に。 左サイドバーの 「Settings → API Keys」 を選択して、 API の発行手続きを行っていきます。

image

画面右上の 「Create API Key」 をクリック。

image

任意の API 管理名を入力して、「Create & View」 ボタン。

【アクセスレベルについて】

今回は Full Access を選択。 2番目の Restricted Access は、メール機能を制限したい時に使用。 3番目の Billing Access は、 本家SendGrid への支払い状況へのアクセスに使用。つまり概ね Full Access 一択といったところ。ちなみに 3番目の Billing Access は本家SendGrid のみの API。

image

API Key が作成されましたので、 Key を左クリックし、コピー。そして Done を押して API を有効化。

image

次は Python で SendGrid を使えるようにシステムの設定を進めます。上図のようにユーザーアカウント名をクリックし、 「Setup Guide」 を選択。

image

いくつかメール送信のプランが提示されますので、今回は一番上の 「Integrate using our Web API or SMTP relay」 を選択。

【メール送信手順について】
今回は試験的にメールを送信するだけなので一番上を選択。 2 番目の手順紹介は WordPress などにメーリング機能を付けたい時。 3番目はキャンペーンなどで HTML メールを送りたい時。

image

次は API の設定方法を紹介してくれる選択画面。オススメは左の Web API で、 右は SMTPSimple Mail Transfer Protocol を使う場合の設定方法。クリックしてみれば分かるのですが、 右側の SMTP は Pythonモジュール の smtplib を使ったことないとよく分からないと思います。

image

次はプログラミング言語の選択、 Python を選択。

image

Python で SendGrid を利用するための手順が紹介されますので、 まずは先ほど作成した API KEY を貼り付けて、 「Create Key」 ボタン。次に ③ で書かれているコードをコピー。

今回は自分のパソコンでテストしてみたいと思いますので、 ターミナルに先ほどの コード をコピペ&実行。

SendGrid の Pythonライブラリをインストール。

SendGridのページに書かれている ⑤ のコードをコピペして、メールアドレス等を適当に変更。そして適当な名前でファイル保存(今回 mail.py)。

上図のPythonコード

import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

message = Mail(
    from_email='oshimamasara@yahoo.co.jp',
    to_emails='oshimamasara@gmail.com',
    subject='Test Mail です',
    html_content='とんだ?')
try:
    sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
    response = sg.send(message)
    print(response.status_code)
    print(response.body)
    print(response.headers)
except Exception as e:
    print(e.message)

そして Python 〇〇.py とすると、コードで書いた宛先にメールが送信されます。

パソコン画面でメールを見ると、小さい文字で sendgrid.net 経由 と書かれていますね。スマホで見た時は sendgrid.net 経由 がないので違和感がないと思います。

今回は送信先が 1つですが、コードで送信先を制御していますので、リストにある宛先全員に送ったり、入力されたメールアドレスを宛先に当てはめて確認メールを送ったり、いろいろビジネス展開に利用できると思いますね。

image

そしてメール送信後、管理画面を開きますと上図のようにメールの開封状況等をチェックすることができます。無料プランでもこうした機能があるのはいいですね。

AIエンジニアに必要なスキルが身に付く

無料カウンセリングはこちら

まとめ

Python で単にメールを送るだけ、ではあまり役に立つイメージはできませんが、スクレイピングと併用したり、他の API と併用したりすると自分だけの 「価格チェックアプリ」 や 「お知らせアプリ」 作れると思います。

Pythonanywhere という無料サーバーと組み合わせると完全無料で 「チェックアプリ」 を作ることも可能。

「Python、基礎からきちんと学習したいな」「Python面白いし、エンジニアになってみたいな」 と思いながらも中々行動に移せない方、 令和 2年にむけてチョット前進してみませんか? Pythonの学習方法、 エンジニアへの転身方法は色々あると思いますが、 CodeCamp 社提供の CodeCamp GATE どうでしょうか?

「オンラインレッスン?」「マンツーマン?」「大丈夫?」 いろいろ疑問や興味が湧くと思います。 CodeCamp ではそういった不安に応えるべく 「無料体験」 を実施中。本物の生徒さながらにレッスンを予約して、受講できますので CodeCamp の事がよく解ると思いますよ。ご興味ある方は、 公式ページ よりチェックしてみてください。

昨今のプログラミング・ニーズの高まりを受けて、無料体験枠が埋まっている日もあります。予め、ご了承ください。


オシママサラ
この記事を書いた人
オシママサラ
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp