DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

RaspberryPiからGmailを送る

ラズパイからGメールを送りましょう。

<参考「爺メール」>

f:id:DreamerDream:20191230130957p:plain

 

今回の内容はこちらのサイトを参考というかほぼコピペなんだけど、

[Python]Gmailで簡単にメール送信

日本語文字化け対策とimportして他のpythonプログラムから利用出来るようにした。

 

-- gmail.py --

#!/usr/bin/python

# -*- coding: utf-8 -*-

 

"""

Gmail

Gmailで簡単にメール送信

"""

 

import atexit

import sys

import os.path

import datetime

import smtplib

import threading

from email import Encoders

from email.Utils import formatdate

from email.MIMEBase import MIMEBase

from email.Header import Header

from email.MIMEMultipart import MIMEMultipart

from email.MIMEText import MIMEText

 

#Gmailアカウント

ADDRESS = "(所持しているアドレス)@gmail.com"

PASSWARD = "(パスワード)"

 

#SMTPサーバの設定(Gmail)

SMTP = "smtp.gmail.com"

PORT = 587

 

class SendMail():

 

        def __init__(self,add,sub,body):

                self.add = add

                self.sub = sub

                self.body = body

 

                self.thread = threading.Thread(target = self.send)

                self.thread.start()

 

 

        def create_message(self, from_addr, to_addr, subject, body, mime=None, attach_file=None):

 

                """

                メッセージを作成する

                @:param from_addr 差出人

                @:param to_addr 宛先

                @:param subject 件名

                @:param body 本文

                @:param mime MIME

                @:param attach_file 添付ファイル

                @:return メッセージ

                """

                msg = MIMEMultipart()

                msg["From"] = from_addr

                msg["To"] = to_addr

                msg["Date"] = formatdate()

                msg["Subject"] = Header(subject, "utf-8")

                body = MIMEText(body,"plain","utf-8")

                msg.attach(body)

                # 添付ファイル

                #if mime != None and attach_file != None:

                #    attachment = MIMEBase(mime['type'],mime['subtype'])

                #    file = open(attach_file['path'])

                #    attachment.set_payload(file.read())

                #    file.close()

                #    Encoders.encode_base64(attachment)

                #    msg.attach(attachment)

                #    attachment.add_header("Content-Disposition","attachment", filename=attach_file['name'])

 

                return msg

 

        def send_gmail(self, from_addr, to_addrs, msg):

                """

                メールを送信する

                @:param from_addr 差出人

                @:param to_addr 宛先(list)

                @:param msg メッセージ

                """

                smtpobj = smtplib.SMTP(SMTP, PORT)

                smtpobj.ehlo()

                smtpobj.starttls()

                smtpobj.ehlo()

                smtpobj.login(ADDRESS, PASSWARD)

                smtpobj.sendmail(from_addr, to_addrs, msg.as_string())

                smtpobj.close()

 

        def send(self):

                msg = self.create_message(ADDRESS, self.add, self.sub, self.body)

                self.send_gmail(ADDRESS, [self.add], msg)

 

def send(add, sub, body):

        SendMail(add, sub, body)

 

if __name__ == '__main__':

        argv = sys.argv

        argc = len(argv)#引数の数取得

        if argc < 4:

                print "args =[Address],[subject],[body]"

        else:

                send(argv[1], argv[2], argv[3])

 

 --- 利用方法 ---

#Gmailアカウント

ADDRESS = "(所持しているアドレス)@gmail.com"

PASSWARD = "(パスワード)"

の部分を所持している物に書き換える

 例

ADDRESS = "raspberrypi@gmail.com"

PASSWARD = "raspberrypw"

 

コマンドライン利用するには第1引数に送信先アドレス、第二引数にタイトル、第三引数に内容を入れる

sudo python gmail.py aiteaddress@gmail.com タイトル 内容

pythonから使うにはimportして.send()で値を渡す。

import gmail

gmail.send("aiteaddress","タイトル","内容")

 

しかしこれで送信してもエラーが出る。

Google様が安全性の低いセキュリティー認証として受け付けてくれない。「ログインとセキュリティ」設定から安全性の低いアプリの許可を有効にする必要がある。

f:id:DreamerDream:20151215130023p:plain

安全性の低い認証方法なのでプライベートで使うGmailとは別にRaspberryPi用のアドレスを用意する方が良さそうです。

 

このGmail送信コードを僕はこのような用途で使っています↓

 

 

 

dreamerdream.hateblo.jp

 

dreamerdream.hateblo.jp

dreamerdream.hateblo.jp
dreamerdream.hateblo.jp

 

kampa.me