Udemy講座 Pythonista メールで添付ファイルを送る方法

Python学習【365日チャレンジ!】133日目のマスターU(@Udemy11)です。

ここ数日、検索順位チェックツール【SERPOSCOPE】の調子がおかしいのですが、どうもGoogleさんがデータを収集させてくれていないようです。

下記の記事を参考にAWS(AmazonWebServices)にインストールして使っているのですが、ツールをバージョンアップすれば改善するんでしょうか?

無料で使えて登録できるキーワードに制限はないので、Windows定番の順位チェックツール【GRC】よりも便利で使いやすいので、Macユーザーには必須のツールなんです。

とりあえず、ツールのバージョンアップを試してみようと思います。

ほんと、最近のGoogleさんは検索に関して色んな意味でシビアになっているので困っちゃうんですよね。

という悩みはおいといて、今日もPython学習をはじめましょう!

昨日の復習

昨日は、PythonからYahoo!mailを使ってE-mailを送信する方法ついて学習しました。

Yahoo!メールもOutlookやGmailと同じ方法でメールを送信できましたが、一つ違うのは、STARTTLSに対応していないため、メール送信のコードを少し変更しました。

また、config.pyにメール送信のための情報を記述して、実行ファイルで読み込んだ変数を使ってみました。

詳しくは、昨日の記事をごらんください。

今日は、Outlookメールを使って添付ファイルを送信してみます。

添付ファイル用のモジュール

添付ファイルを扱うには、標準ライブラリからメール送信で使ったmessageモジュールに変えて2つのモジュールを読み込む必要があります。

次のように3つのモジュールを読み込みます。

from email.mime import multipart
from email.mime import text
import smtplib

メールを送るだけなら、messageモジュールで良かったのですが、ファイルを添付するには1行目、2行目のモジュールが必要になってきます。

メール設定のconfig.py

Yahoo!mail編に続き、今回も外部ファイルのconfig.pyに設定を保存しています。

from_email = 'udemyfun@outlook.jp'
smtp_host = 'smtp.office365.com'
smtp_port = 587
username = 'udemyfun@outlook.com'
password = 'outlookmailnopassword'

今回は、to_emailをこのファイルに書かずに、実行ファイルに直接記述しました。

メインのコード

オリジナルモジュールである設定ファイルのconfig.pyを読み込んで変数の定義とメッセージと添付ファイルの指定、メール送信のコードを書いていきます。

import config


smtp_host = config.smtp_host
smtp_port = config.smtp_port
from_email = config.from_email
to_email = 'master@udemyfun.com'
username = config.username
password = config.password

to_email以外はconfig.pyから読み込んでいます。

msg = multipart.MIMEMultipart()
msg['Subject'] = 'Test mail subject'
msg['From'] = from_email
msg['To'] = to_email
msg.attach(text.MIMEText('Test mail with attached file', 'planin'))

with open('day0622.py', 'r') as file:
    attachment = text.MIMEText(file.read(), 'plain')
    attachment.add_header('Content-Disposition', 'attachment', filename='day0622.txt')
    msg.attach(attachment)

次にメッセージ部分ですが、これまで使っていたmassage.EmailMessage()にかえてmultipart.MIMEMultipart()でインスタンスを生成しています。

次にset_contentではなく、20行目のようにattachを使ってメッセージ部分を指定します。

21行目以降のファイル添付ですが、実行ファイルであるday0622.pyを読み込んで、テキストファイルとして添付しています。

23行目でメールのヘッダ部分に添付ファイルを指定しているのですが、Content-Dispositionは、本文と一緒に内容を表示するinlineか、添付ファイルにするattachmentかを選択する必要があります。今回は、attachment(変数で定義したattachmentとは別)を指定しています。

最後のサーバーにアクセスしてメールを送信する部分はこれまでのOutlookのメール送信と変更無しです。

server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username, password)
server.send_message(msg)
server.quit()

このPythonファイルを実行すれば、5秒程度で実行を完了し、メールが送信されます。

届いたメール

届いたメールがこちら

Pythonista Udemy講座 メール送信 attached file

きちんと添付ファイルとしてメールが届いています。

添付されているファイルにはday0622.pyのテキストデータが入っています。

Pythonista Udemy講座 添付ファイルを送信

ちなみに、ファイル添付の際のヘッダーでattachmentではなくinlineを指定すると、本文に続いてファイルのデータが表示されるメールが届きます。

やり方は他にもある

ネットで【Python 添付ファイル メール送信】と検索してみると、いろいろな記事がヒットします。

今回のようなやり方だけでなく、いろいろな添付ファイルをメールで送信する方法が紹介されています。

紹介されているコードで目的は果たせるわけなので、どれも正解でどれが優れていたり、劣っていたりするわけではありません。

つまり、目的に達するための方法は一つじゃないということです。

いろいろなやり方を試して、自分が最も使いやすいコードを使うようにすればいいと思いますし、一つの方法にこだわる必要もありません。

のんびり自分に合ったコードを見つけるようにしましょう!

それでは明日も、Good Python!

私が受講しているUdemyのPython講座はこちらです。

Udemy講師 酒井さん プログラミング Python