【Python】Gmailを送る方法【ファイル添付】【コピペで使い回せる】

 今回のテーマは、「Gmailを送る方法」です!

 GmailのメールをPythonで送るには、事前にセキュリティ関係の設定を行ったりと意外と苦戦する可能性があります。

 今回の記事では、Gmailの設定部分から、共通化されたメールを送るためのコードを解説します。
コードもほとんどコピペで動くようになっています。

 PythonでのGmailの送り方をマスターすると色々と便利ですので、ぜひ実装してみてください!

目次

前準備

送り元のGmailアカウントに対して、以下の設定が必要になります。

「安全性の低いアプリのアクセス」許可を行う

送信に利用するGmailアカウントで「安全性の低いアプリのアクセス」を許可する必要があります。

まず、Gmailのサイトにアクセスします。

https://myaccount.google.com/security

 アクセス・ログインすると「安全性の低いアプリのアクセス」という項目があります。
初期では、「オフ」になっていますのでこちらを「オン」にして下さい。

アプリパスワードの生成

次に、「アプリパスワード」を生成します。
「Googleへのログイン」という項目があります。2段階認証がオフの人はオンにして下さい。

次に「アプリパスワード」を設定します。そして、左にメール、右に利用するデバイスを設定します。

「生成」を押します。

これでアプリパスワードが生成できました!生成されたアこれで「アプリパスワード」が生成できました!これを利用しメールを送るプログラムを作成しますので、メモしておいて下さい。

このアプリパスワードは人に教えないで下さい!
悪用されると勝手にメールを送られてしまいます!

コーディングをしてGmailを送信してみよう!

 今回利用するコードを記載します。
ある程度汎用的に使えるように作成しているので少し長くなっていますが、コピーして少し設定を変更するだけで利用できます。

2つのファイルは同階層において下さい。

Gmailを送るコードディングと設定をしてみよう!

import ssl
import os
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart


class SendMail:

    __instance = None

    #変数
    FROM_ADDRESS = '送信元@gmail.com'
    #Gmailから発行できるアプリ用のパスワード
    APP_PASSWORD = '生成したアプリパスワード'
    BCC = ''

    @staticmethod    
    def Si():
        '''
        シングルトン処理
        '''
        if SendMail.__instance == None:
            SendMail()
        return SendMail.__instance

    def __init__(self):
        '''
        コンストラクタ
        '''
        if SendMail.__instance != None:
            raise Exception("Singletonクラス")
        else:
            SendMail.__instance = self


    def create_send_message(self,
                        toAddress: str,
                        subject: str, 
                        body:str):
        '''
        メール内容の作成
        '''

        msg = MIMEText(body)
        msg['Subject'] = subject
        msg['From'] = self.FROM_ADDRESS
        msg['To'] = toAddress
        msg['Bcc'] = self.BCC
        msg['Date'] = formatdate()
        #return msg
        self.__send(msg)

    def create_send_message_file(self,
                       toAddress: str,
                       subject: str, 
                       body:str , 
                       filepath: str):
        '''
        メール内容(添付ファイルあり)の作成
        '''

        filename = os.path.basename(filepath)

        msg = MIMEMultipart()
        msg['Subject'] = subject
        msg['From'] = self.FROM_ADDRESS
        msg['To'] = toAddress
        msg['Bcc'] = self.BCC
        msg['Date'] = formatdate()
        msg.attach(MIMEText(body, "plain"))

        with open(filepath, "rb") as f:
            mb = MIMEApplication(f.read())

        mb.add_header("Content-Disposition", "attachment", filename=filename)
        msg.attach(mb)

        self.__send(msg)


    def __send(self,
             msg):
        '''
        メールの送信
        '''

        try:
            smtpobj = smtplib.SMTP_SSL('smtp.gmail.com', 465, timeout=10)
            #gmailログイン
            smtpobj.login(msg['From'], self.APP_PASSWORD)
            #メールを送信する
            smtpobj.sendmail(msg['From'],msg['To'],msg.as_string())
        
        except Exception as e:
            print(e)
        smtpobj.close()
        print("Eメールを送信しました。")
from SendMail      import SendMail as mail

#送り先
strToAddress :str = "送り先@gmail.com"

#メールタイトル
strTitle : str = "メールのタイトル"

#出力文字
strOutPut :str = "メールの本文"

#メールを送る
mail.Si().create_send_message(strToAddress,strTitle,strOutPut)

少し長いですが、3箇所の設定とメール内容をセットするだけで送ることができます!

    #変数
    FROM_ADDRESS = '送信元@gmail.com'
    #Gmailから発行できるアプリ用のパスワード
    APP_PASSWORD = '生成したアプリパスワード'

「SendMail.py」の上の方にある「FROM_ADDRESS」に前準備で用意した、送信元のGmailのアドレスを入力して下さい。

 また同様に前準備で用意したアプリパスワードを「APP_PASSWORD」に入力して下さい。
これで「SendMail.py」の設定は完了です。

次に、送り先を設定します。

#送り先
strToAddress :str = "送り先@gmail.com"

 これで設定完了です。

 次にメール内容の記述について、「main.py」の以下の箇所でタイトルと本文をセットします。
本文で改行を行いたい場合は、改行コードを利用して下さい。

#メールタイトル
strTitle : str = "メールのタイトル"

#出力文字
strOutPut :str = "メールの本文"

 これで設定完了です!プログラムを実行してメールを送ってみましょう。

プログラムの実行が完了すると、メールが受信されます。

メールにファイルを添付してみよう!

 上記の、「main.py」に添付ファイルの設定を追加します。
※「SendMail.py」は添付なしの場合と同じです。

from SendMail      import SendMail as mail

#送り先
strToAddress :str = "送り先@gmail.com"

#メールタイトル
strTitle : str = "メールのタイトル"

#出力文字
strOutPut :str = "メールの本文"

#ファイルパス
strFilePath = "./image.jpg"

#メールを送る(添付ファイル付き)
mail.Si().create_send_message_file(strToAddress,strTitle,strOutPut , strFilePath)

ファイルパスを設定することで、ファイルを添付できます。

#ファイルパス
strFilePath = "./image.jpg"

 これで設定完了です!プログラムを実行してメールを送ってみましょう。

プログラムの実行が完了すると、メールが受信されます。

コードの説明

 メールに関連する部分のコードを説明します。

SMTPサーバに接続

 Gmailのサーバアドレス(smtp.gmail.com)、
ポート465に自分のGoogleアカウントとパスワードで接続しています。

            smtpobj = smtplib.SMTP_SSL('smtp.gmail.com', 465, timeout=10)
            #gmailログイン
            smtpobj.login(msg['From'], self.APP_PASSWORD)

メールをオブジェクトの生成

 MIMETextオブジェクトに送信するメールの内容を設定しています。

        msg = MIMEText(body)
        msg['Subject'] = subject
        msg['From'] = self.FROM_ADDRESS
        msg['To'] = toAddress
        msg['Bcc'] = self.BCC
        msg['Date'] = formatdate()

メールを送信する

上記で設定したメールを「send_message」で送信します。

            #メールを送信する
            smtpobj.sendmail(msg['From'],msg['To'],msg.as_string())

まとめ

 今回、Gmailを送る方法を紹介しました。

 エラー時にメールを送ったり、常駐プログラムの結果などを定期的にメールを送ったりとコピーするだけで気軽に使えるので、色々なプログラムに組み込んで見て下さい!

 今回の記事が、皆さんの技術力向上につながると嬉しいです。
以上、おつかれさまでした!

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次