【Python】Pythonを使って電子メール(Gmail)を送信する方法

Pythonの応用
スポンサーリンク

初心者の独学でのプログラミング学習はとてもツライ…

プログラミングをマスターしたい!

今のIT業界はプログラミングエンジニアが不足していると言われています。
高収入の職業とも言われる分野もありますし、AI、機械学習、ディープラーニング、IOTといった注目される分野が目白押しです。

でも、いざ初心者がプログラミングをマスターしようとすると…

  • 本を読んだりネットの記事で自力で勉強しているけど限界を感じる
  • プログラミングスクールに定期的に通うのは面倒だ
  • 地方に住んでると家の近くにプログラミングスクールなんてない
  • どのプログラミング言語を学べばいいのか悩む
  • 実際の就職や転職にプログラミングが活かせるのか心配だ

など、プログラミングを自分で勉強しようとすると悩みが尽きません。

プログラミングに詳しい友人に教えてもらおうと思っても、そんな友人なんて滅多にいません。いたとしても細かく教えてくれるほど時間に余裕がある人はいないでしょう。

そんな独学でプログラミングをマスターするのに限界を感じてる方に、オンラインプログラミングスクールをがおすすめです。

おすすめのオンラインスクールはこちら

Pythonを使って電子メールを送信する方法について見ていきます。

ここでは電子メールをGoogleのGmailを使って、メールを送信するコードを書いて行きます。

他のフリーメール(hotmailなど)やメールサーバーなどでも同様のことができるはずです。

スポンサーリンク

PythonコードでGmailを送信する

では、Gmailを送信するコードをPythonで書いていきましょう。

送信元となるGmailのアカウント(メールアドレス)とパスワード、送信先のメールアドレスを用意しておきます。

また、gmailのホスト情報などが必要なので調べておきます。次のサイトに掲載されています。

他のメール プラットフォームで Gmail のメールをチェックする - Gmail ヘルプ
IMAP を設定して SMTP の設定を変更すると、Microsoft Outlook や Apple Mail などの他のメール クライアントで Gmail のメールを読むことができます。IMAP を使

これらを使って以下のようにコードを書いて行きます。

まず、メールを送信するのでメッセージとSMTPのライブラリをインポートします。

ホスト名とポート名を指定しますが、これはGmail の上の情報記事の中にあるものを記入します。そして、送信元のメールアドレス、送信先のメールアドレス、サーバーにログインするためのユーザーネームとパスワードを、それぞれの変数に代入しておきます。(記載のものは架空のものですので、各自の状況に合わせて書き換えてください)

メールを作成して行きます。message.EmailMessage()を使ってメールのオブジェクトを作ります。set_content()を使ってメール本文を記入し、Subjectにメールの件名、From、To、に先ほど設定した送信元と送信先を指定します。これでメール(テストメール)の完成です。

そして、メールを送信するためにサーバーに接続します。

smtplib.SMTP()を使って、ホストとポートを指定します。ehlo()でサーバーと通信を開始し、starttls()でセキュアな通信経路を利用します。再度、ehlo()でサーバーに呼びかけるとサーバー側からログイン情報を要求してくるので、login(username, password)で情報を渡します。認証が成功したらsend_message(msg)でメッセージを送信します。完了したらquit()でサーバーを閉じます。

という流れのコードになっています。これをPythonファイルで保存して、ターミナルで実行してみましょう。

Gmailのセキュリティ設定とエラー

おそらく最初の実行ではエラーが出るのではないでしょうか。それはGoogle側がgmailへのアクセスのセキュリティを設定しているため、Pythonのコード実行からログインできないためです。

おそらくGmailにセキュリティ通知が届いていて、「安全性の低いアプリをブロックしました」という情報が表示されるはずです。

ここで、Pythonのコードを実行するために、このセキュリティを回避しておく必要があるので、Googleアカウントの管理画面にアクセスして、「安全性の低いアプリのアクセス」の項目から「安全性の低いアプリの許可」を「有効」に設定します。

これで再度、Pythonコードを受け付けるようになります。この作業は、最初に行っていても良いものです。Googleの提供するアプリにアクセスする時は、このような表示がされるので、必要に応じて設定の許可などをしましょう。

メール送信の確認

Googleのセキュリティの設定を行ったら、このコードを実行してみましょう。

ターミナルから実行した場合は、何も問題が無ければ、数秒待てばプロンプトが再度表示されるはずです。(上のGoogleのセキュリティが効いてブロックされていればエラーが表示されます)

メールが届いているか、送信先のメールボックスを確認してみましょう。

このように、メールが受信できているのが確認できると成功です。

スポンサーリンク

添付ファイルのあるメールを送信する

次は、添付ファイルをつけて、メールを送信するコードを書いてみます。添付するファイルは上のコードをmail_code.pyで同じで作業ディレクトリに保存したものを、テキストファイルとして添付送信してみます。

上のコードを次のように書き換えてみました。

ファイルを添付して送信するには簡単な処理では行えないので、ライブラリを2つ追加してimportしています。

サーバーやポートの情報は同じです。

あとはメール作成の部分が違います。message.EmailMessage() の代わりにmultipart.MIMEMultipart() を利用してメールのオブジェクトを作ります。また、set_content()の代わりに、attach(text.MIMEText()) を使って、テキストを’plain’に指定して、メール本文を記述します。あと、Subjectは先ほどと区別するために少し変更しています。

次に添付ファイルを作成します。withステートメントの構文を使ってファイルを読み込んで作成していきます。withステートメントの使い方は以下で触れています。

【Python】ファイルの作成と読み込み open,write,read,with,seek
Pythonでのファイルの作成、データの入出力をここでは扱います。open()でファイル作成する時の読み書きのモード、write()での書き込み、read()での読み込み方、withステートメント、seek()での位置の移動を学びます。

with open() を使ってファイルを読み出しモード’r’で開きます。text.MIMEText(f.read(), ‘plain’) を使って、f.read()でデータを読み込み、テキストを’plain’に指定して変数attachmentに格納します。これに、add_header()を使ってヘッダー情報を追加し、mail_code.txtというファイルにします。

msg.attach(attachment)でメールにファイルを添付します。

サーバーの接続処理は先ほどと一緒です。

これを実行しすると、次のようにメールが相手先に送信されます。

添付ファイルも受信しているのがわかります。

一応、ファイルをクリックして見ると次のように表示されます。

先のコードがテキストファイルに書き込まれているのがわかります。

スポンサーリンク

SMTPハンドラーを使ってログをメールで送信する

SMTPハンドラーを使ってログをメールで送信するという方法を行ってみます。

これは本来、ログデータをログ解析ソフトで収集して分析し、まとめてメールで送るというような場合に使いますが、こでは模擬的に直接メールに出力するということをやってみます。

なお、ロギングの詳細については以下の記事を参照してください。

【Python】ロギングについて - レベルと出力
Pythonを使ってプログラムの実行中に起こった出来事を記録するロギングを扱います。CRITICAL、ERROR、WARNING、NFO、DEBUGのロギングレベルの変更や出力フォーマットの方法、ファイルへの出力について見ていきます。

これまでのコードのホスト、ポート、メール情報以外は全て次のように書き換えます。

ここではロギングの出力がCRITICA Lの時にメールを送信する処理をやってみます。

ログを取得するのでloggingとhandlersをインポートします。

ホスト情報などはそのままです。

logging.getLogger(‘Gmail’)として名前をとりあえずここではGmailとしてloggerを作ります。これにsetLevel(logging.CRITICAL)としてロギングレベルをCRITICALに設定します。

logger.addHandler(logging.handlers.SMTPHandler())を使って処理を実行していきます。これにホスト情報などの変数を使って、各種引数を渡しています。ホストとポートをタプルで渡し、送信元、送信先のメールアドレス、subjectをSend logs by emailとし、 credentialsでユーザーネームとパスワード、 secureはここではNoneを入れました。timeoutは少し長めに20秒を設定しました。

ロギングの出力を、infoとcriticalに設定します。Pythonのロギングは、デフォルトではINFOは出力されないことになっています。ロギングレベルをCRITICALに先ほど設定したので、このコードを実行すると、メールが送信されることになります。

確認すると次のように受信されます。

受信したメールにはcriticalと出力されているのがわかります。

スポンサーリンク

最後に

ここではGoogleのGmailを使ったメール送信のコードを扱いました。

他の電子メールも設定を変更などするなどすれば、同様の処理を行えるはずです。

ロギングについてもこの期に確認しておくのもいいでしょう。

なお、念のためGoogleアカウントのセキュリティも戻しておきましょう。

自宅学習はオンラインプログラミングスクールを活用!

自宅学習にはオンラインプログラミングスクールがおすすめ!

オンラインプログラミングスクールは独学でプログラミングを学習する時のデメリットを解消する仕組みが備わっています。

気になるところは…

学習がオンラインで完結するのはもちろんですが、独学ではできない質問サポートがあるかどうか。わからないことを現役のエンジニアが質問に答えてくれるといいですよね。

受講者個人に担当のメンターがつき、マンツーマンで学習の相談に乗ってくれることも必要で、ITエンジニアの世界についても伺えたりもすると幅が広がります。

オンライン面談だけでなく、チャット機能を使って気軽に質問を投げかけることができることも大切です。

また、オリジナルプロダクトの開発とサポートがコースの中に組み込まれていて、独学ではなかなか難しい実践的なスキルの習得にもつなげたい。

プログラミングをマスターした後の実際の仕事につながる転職サポートでがあると、ITエンジニアの世界に飛び込むのに不安が解消されます。

そんな豊富なメニューが揃っているおすすめのオンラインプログラミングスクールがこちらにあります。

おすすめのオンラインプログラミングスクールはこちら

TechAcademyはおすすめのオンラインプログラミングスクール!

オンラインのプログラミングスクールでは、テックアカデミーの充実度が目を見張ります。

オンラインで受講が完結するので、自宅学習でプログラミングをマスターしたい人にはテックアカデミーがおすすめです。

メンター制度も現役のプロが対応してくれます。大学生などが対応しているスクールに比べて本気度と専門性が違います。メンター制度の無いスクールもありますし、担当では無いメンターが対応するスクールもあったりするので、相談の質が違いますね。

チャットサポートもあるので、それが無いスクールに比べて相談の気軽さの違いがあります。

プロダクト開発のサポートで実践力が養われるだけでなく、どの講座を利用しても転職サポートが受けられるのはありがたい。

用意されているコースも、初心者向けのプログラミングコースから、Python、Java、PHP、iPhoneアプリ、AndroidといったITエンジニアのベースとなる主要な言語だけでなく、AI、データサイエンス、ブロックチェーン、webアプリケーションと行った実践的なコースまで用意しています。

他にも、webデザインやUI/UXデザイン、動画編集、webディレクションやwebマーケティングといったプログラミング以外での役立つコースまであります。

このようなたくさんの選択肢から自分にあったコースを選ぶことがでるのがテックアカデミーです。

コースの期間も短期間でマスターしたり、長期の受講でじっくり取り組むコースを選ぶこともできます。

複数講座のセットコースを利用することで大幅な割引が受けらるので、お得に受講することもできます。

無料体験もありますので、プログラミング学習でオンラインスクールを考えている人はTechAcademyをぜひ利用してみてください。

テックアカデミーの公式サイトはこちら

Pythonの応用
スポンサーリンク
CodeGraffitiをフォローする

とにかく進め!Pythonプログラミング入門 〜 コードグラフィティ
タイトルとURLをコピーしました