LoginSignup
18
24

More than 5 years have passed since last update.

pythonでgmailを送信するサンプルプログラムの作成

Last updated at Posted at 2019-05-09

*サンプルプログラムは一番下に記載

pythonでメール送信のプログラムを作成する際に出てきた用語のまとめ

MIME(Multipurpose Internet Mail Extensions)

電子メールの機能を拡張して、様々な形式のデータを扱える様にした規格のこと。
ネットワーク上でやり取りする電子メールで、当初の規格では唯一記載できたのがASCⅡ英数字データのみだったが、MIMEを使うことで、漢字、画像、音声どのバイナリーデータを扱える様に考案された。
[参考記事]
https://kotobank.jp/word/MIME-8967

SMTP(Simple Mail Transfer Protocol) サーバー

そもそもメールの送受信には2つのサーバーが必要であり、SMTPサーバーは、メール送信に必要となるサーバー。SMTPはメール送信時に利用されるプロトコルのことで、送信元となるメールソフトから送信用メールサーバーを経て、相手先の受信メールサーバーへ電子メールを転送する際に使用される。
[参考記事]
https://www.kagoya.jp/howto/rentalserver/smtpserver/

※プロトコル
コンピュータ同士の通信の際に用いられる、規格のこと。異なるメーカーのソフトウェア、ハードウェアでも共通のプロトコルに従うことによって、正しい通信を可能にしている。
[参考記事]
https://kotobank.jp/word/%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB-8535

POP(Post Office Protocol)サーバー

メールの受信に必要となるサーバー。メールサーバーに保存された電子メールを、受信者のメールソフトやPCにダウンロードする仕組みとなっている。POPはユーザーがメールサーバーから自分の自分のメールを取得する際に使用されるプロトコル。
[参考記事]
https://ja.wikipedia.org/wiki/Post_Office_Protocol

IMAP(Interner Message Access Proctocol)サーバー

POPサーバーと同様にメールの受信に用いられるサーバーのこと。POPサーバーは、メールサーバーにあるメールをユーザーのPCにダウンロードする方式でメールを取得するが、IMAPサーバーは、メールサーバー上のメールを直接閲覧する規格を採用している。IMAPは、メールサーバー上の電子メールにアクセスし、操作するためのプロトコル。
[参考記事]
https://ja.wikipedia.org/wiki/Internet_Message_Access_Protocol

python emailモジュールについてまとめ

smtplibモジュール

pythonでSMTPまたはESMT(Extended SMTP)を使用するためのモジュール。インターネット上のホストにメールを送信するために用いられる。SMTPインスタンスはSMTP接続を使用する際に、ホスト名とポートを指定することで使用できる。
[参考記事]
https://docs.python.org/ja/3/library/smtplib.html

email.mimeモジュール

メールとMIMEオブジェクトを作成するモジュール
MIMEオブジェクトには以下がある

MIMEBase

以下のMIME用サブクラスの基底となるクラス。以下のMIMEクラスは全てMIMEBaseのサブクラスとなる。

MIMENonMultipart

multipart形式ではないMIMEメッセージを定義するクラス。ファイル添付用のメソッドであるattach()メソッドが呼ばれた際に、その使用を防ぐことができる。

MIMEMultipart

multipart形式のMIMEメッセージを定義するクラス。ファイル添付用のメソッド、attach()メソッドを使うことができるので、添付ファイルを持ったメールを作成するときは、ものオブジェクトを使用する。

MIMEApplication

MIMEMessageオブジェクトのapplicatiuonタイプを扱う

MIMEAudio

MIMENonMultipartオブジェクトのサブクラスで、音声データを扱うMIMEオブジェクトを作成する。

MIMEImage

MIMENonMultipartオブジェクトのサブクラスで、画像データを扱うMIMEオブジェクトを作成する。

MIMEMessage

MIMENonMultipartオブジェクトのサブクラスで、messageを扱うMIMEオブジェクトを作成する。

MIMEText

MIMENonMultipartオブジェクトのサブクラスで、textを扱うMIMEオブジェクトを作成する。

まとめ

attach()メソッドを使って、添付ファイル形式でのメールを送信する場合は、MIMEMultipart
オブジェクトを使用。
添付ファイルのないMIMEオブジェクトを作成する、MIMENonMultipartを用いる。

詳しい説明はリファレンスを参照。
[参考記事]
https://docs.python.org/ja/3/library/email.mime.html

サンプルプログラム

上記を踏まえた上での 添付ファイル付きメールをgmalを使って送信するサンプルプログラム


# gmailを使ったメール送信のサンプルプログラム
from smtplib import SMTP
from email.mime.text import MIMEText
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart

def sendGmailAttach():
    sender, password = "hoge@gmail.com", "hogehoge" # 送信元メールアドレスとgmailへのログイン情報 
    to = 'fuga@gmail.com'  # 送信先メールアドレス
    sub = 'メールだよ' #メール件名
    body = '画像添付してるよ'  # メール本文
    host, port = 'smtp.gmail.com', 587

    # メールヘッダー
    msg = MIMEMultipart()
    msg['Subject'] = sub
    msg['From'] = sender
    msg['To'] = to

    # メール本文
    body = MIMEText(body)
    msg.attach(body)

    # 添付ファイルの設定
    attach_file = {'name': 'sample.jpg', 'path': './sample.jpg'} # nameは添付ファイル名。pathは添付ファイルの位置を指定
    attachment = MIMEBase('image', 'png')
    file = open(attach_file['path'], 'rb+')
    attachment.set_payload(file.read())
    file.close()
    encoders.encode_base64(attachment)
    attachment.add_header("Content-Disposition", "attachment", filename=attach_file['name'])
    msg.attach(attachment)

    # gmailへ接続(SMTPサーバーとして使用)
    gmail=SMTP("smtp.gmail.com", 587)
    gmail.starttls() # SMTP通信のコマンドを暗号化し、サーバーアクセスの認証を通す
    gmail.login(sender, password)
    gmail.send_message(msg)

if __name__ == '__main__':
    sendGmailAttach()
    print('メールが送信されました')

他参考記事

添付ファイルについて
http://trade-and-develop.hatenablog.com/entry/2017/03/12/145514
SMTPの認証エラーについて
https://hacknote.jp/archives/27022/
SMTPサーバーとしてGmailを使用する際の設定
→安全性の低いアプリケーションからの設定を有効にする
https://myaccount.google.com/u/2/lesssecureapps?pageId=none

18
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
24