あなたのビジネスと共に歩むサイト

with-Biz

Python3でgmailからメールを送る方法(ファイル添付あり)

AIの分野で注目のPython(パイソン)ですが、とても便利な言語で、いろいろなことができちゃいます。
ぼくは、クローリングツールを作る兼ね合いでPythonと出会い、クローリングツールの他に自動メール送信ツール、ビットコイン自動売買ツールなど、いろいろな物を試作しました。

その中で、gmailでファイル添付してメールを送信する仕組みが、調べた通りでできなかったため、自分なりに修正した物でを公開したいと思いました。

そのまま使えるはずですが、もしうまくいかない場合はご連絡ください。

Python3を使ってgmailでメールを送信するプログラム

mail.pyを作成する

mail.pyを作成し、以下をそのままコピーしてください。

from email.mime.text import MIMEText
from email.utils import formatdate
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import smtplib

def create_message(from_addr, to_addr, cc_addr, subject, body):
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = from_addr
msg['To'] = ",".join(to_addr)
msg['Cc'] = ",".join(cc_addr)
msg['Date'] = formatdate()

body = MIMEText(body)
msg.attach(body)

return msg

def create_message_attach(from_addr, to_addr, cc_addr, subject, body, mine, attach_file):
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = from_addr
msg['To'] = ",".join(to_addr)
msg['Cc'] = ",".join(cc_addr)
msg['Date'] = formatdate()

body = MIMEText(body)
msg.attach(body)

#添付ファイルのMIMEタイプを指定する
attachment = MIMEBase(mine['type'],mine['subtype'])

file = open(attach_file['path'],'rb')
attachment.set_payload(file.read())
file.close()
encoders.encode_base64(attachment)
msg.attach(attachment)
attachment.set_param('name',attach_file['name'])
attachment.add_header('Content-Dispositon','attachment', filename=attach_file['name'])

return msg

def send(from_addr, to_addrs, msg, my_password):
smtpobj = smtplib.SMTP('smtp.gmail.com', 587)
smtpobj.ehlo()
smtpobj.starttls()
smtpobj.ehlo()
smtpobj.login(from_addr, my_password)
smtpobj.sendmail(from_addr, to_addrs, msg.as_string())
smtpobj.close()

メインのファイルに追記する

次に、メインのファイルにて以下を入力してください。

import configparser

# iniファイルの読み込み
ini = configparser.ConfigParser()
ini.read('./config.ini','UTF-8')

# メール送信用データ
FROM_ADDRESS = ini['mail_info']['FROM_ADDRESS']
MY_PASSWORD = ini['mail_info']['MY_PASSWORD']
TO_ADDRESS = ini['mail_info']['TO_ADDRESS'].split(',')
CC_ADDRESS = ini['mail_info']['CC_ADDRESS'].split(',')


SUBJECT = 'タイトル'
BODY = '本文'

to_addr = TO_ADDRESS
cc_addr = CC_ADDRESS
subject = SUBJECT
body = BODY
to_addrs = to_addr + cc_addr

msg = mail.create_message(FROM_ADDRESS, to_addr, cc_addr, subject, body)
mail.send(FROM_ADDRESS, to_addrs, msg, MY_PASSWORD)

iniファイルを作成する

最後にiniファイルに送信先情報を記載します。
CC_ADDRESSとCC_ADDRESSは「,」区切りで複数登録することができます。

[mail_info]
FROM_ADDRESS = hoge@hoge.co.jp
MY_PASSWORD = password
TO_ADDRESS = to_hogehoge@hoge.co.jp
CC_ADDRESS = cc1_hogehoge@hoge.co.jp,cc2_hogehoge@hoge.co.jp

Pythonを使ってGmailでファイル添付してメールを送信するプログラム

メインのファイルに追記する

メインの部分だけ一部修正します。

import configparser

# iniファイルの読み込み
ini = configparser.ConfigParser()
ini.read('./config.ini','UTF-8')

# メール送信用データ
FROM_ADDRESS = ini['mail_info']['FROM_ADDRESS']
MY_PASSWORD = ini['mail_info']['MY_PASSWORD']
TO_ADDRESS = ini['mail_info']['TO_ADDRESS'].split(',')
CC_ADDRESS = ini['mail_info']['CC_ADDRESS'].split(',')


SUBJECT = 'タイトル'
BODY = '本文'

to_addr = TO_ADDRESS
cc_addr = CC_ADDRESS
subject = SUBJECT
body = BODY
to_addrs = to_addr + cc_addr

mine={'type':'text','subtype':'comma-separated-values'}
attach_file={'name':os.path.basename(convertFilePath),'path':convertFilePath}
msg = mail.create_message_attach(FROM_ADDRESS, to_addr, cc_addr, subject, body, mine, attach_file)
mail.send(FROM_ADDRESS, to_addrs, msg, MY_PASSWORD)

上記ではCSVを添付するように設定しています。

【まとめ】Pythonはやっぱり便利

ぼくは、クローリングの結果をメールで送信するプログラムを作りましたが、他にも使えると思います。

例えば、日報。システムで作業管理している場合には日報はないかもしれませんが、そういったものがない場合、個人的にエクセルで作業記録をし、そのエクセルの内容を文面に落とし込む処理を書き、Pythonで自動送信すれば、日報の出し忘れもなくなります。

ちなみに、クローリングとの相性は比較的良いと思います。
新しいデータが見つかったり、条件にあう情報が見つかったら、URLと内容を本文に記載してメールを自動送信することで、出先でも気づけるため、情報を取り扱う方に向いていると思います。

今後もPythonに関する情報を公開していきたいと思います。

「ReCaptcha V2」を突破する!2Captchaで挑む完全自動化

スクレイピングやブラウザ操作の自動化タスクにおいて、一番の難所は何といっても各種キャプチャの突破です。 そもそもキャプチ ...

python3でPyOCRを使って画像を文字列に変換する方法

OCRとは OCRとはOptical Character Recognition/Readerの略で、オーシーアールと読 ...

pyhon3でWEBクローリングするならSelenium WebDriverを活用しよう(導入手順と使い方)

スクレイピングは情報を「抽出」すること スクレイピングとは「何らかのデータ構造から抽出すること」を指します。 簡単に言う ...

Python3でgmailからメールを送る方法(ファイル添付あり)

AIの分野で注目のPython(パイソン)ですが、とても便利な言語で、いろいろなことができちゃいます。ぼくは、クローリン ...