*サンプルプログラムは一番下に記載
##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