[Python] メール(smtplib)を送信する方法
こんにちは。明月です。
この投稿はPythonでメール(smtplib)を送信する方法に関する説明です。
プログラムのプロジェクト中でメール発送することに関するプログラム作成がすごくあると思います。例えば、ウェブサービスで会員加入認証やパスワード再設定、様々なアラムオプション、お知らせなどがあると思います。
ウェブサービスではなくてもローカルでは大量広告メール(spam)もあるし、スケジュールアラムもあります。
そのため、どんなプログラムでもメールに関するモジュールは大事だと思います。
Pythonでメールライブラリを使うためにはメールプロトコールに関しても少し知らなければならないです。
メールプロトコールはSMTP(Simple Mail Transfer Protocol)を使いますが、これがテルネット方式になっているしHELO、MAIL、RCPT、DATAのコマンドで通信します。
私の説明よりウィキによく説明されているのでご参考をお願いします。
link - https://ja.wikipedia.org/wiki/
Pythonでメールを発送する前にメールサーバー設定が必要です。
Google mail - https://support.google.com/
私の場合はGoogleのメールをよく使います。
先にクロムに接続して右上のアカウントの管理に行きます。
アカウント管理に移動して安全性の低いアプリのアクセスのタブに移動します。
安全性の低いアプリの許可を有効にします。
このチェックをしないと外部からグーグルメールを使用できないようにすることです。なので、idやpwの漏れがなければそんなに問題はありません。
Pythonでソースを作成してメールを発送しましょう。
# メールモジュール
import smtplib
# メールメッセージを作成するモジュール(MIMEBaseは以下のMIMEMultipart、MIMEText、MIMEApplication、MIMEImage、MIMEAudio)の親モジュール
# 別に宣言する必要はない。
#from email.mime.base import MIMEBase
# メールのData領域のメッセージを作成するモジュール(MIMEText、MIMEApplication、MIMEImage、MIMEAudioがattachなればバウンダリータイプに変換)
from email.mime.multipart import MIMEMultipart
# メールの本文内容を作成するモジュール
from email.mime.text import MIMEText
# メールの添付ファイルをbase64タイプに変換
from email.mime.application import MIMEApplication
# メールのイメージファイルをbase64タイプに変換(Content-ID生成)
from email.mime.image import MIMEImage
# メールの音楽ファイルをbase64タイプに変換(Content-ID生成)
from email.mime.audio import MIMEAudio
# ファイルIOモジュール
import io
# メールサーバと通信する前にメッセージを作成する。
data = MIMEMultipart()
# 送信者設定
data['From'] = "nowonbun@gmail.com"
# 受信者設定(複数はコンマ区切り)
data['To'] = "nowonbun@gmail.com,nowonbun@gmail.com"
# CC受信者設定
data['Cc'] = "nowonbun@gmail.com"
# BCC受信者設定
data['Bcc'] = "nowonbun@gmail.com"
# メールタイトル設定
data['Subject'] = "Test Mail"
# 添付ファイル追加
with open("test.xlsx", "rb") as fp:
# Nameはメール受信者で設定するファイル名
part = MIMEApplication(fp.read(), Name = "test.xlsx")
# Data領域のメッセージバウンダリー追加
data.attach(part)
# イメージファイル追加
with open("capture.png", 'rb') as fp:
# Nameはメール受信者で設定するファイル名
img = MIMEImage(fp.read(), Name = "capture.png")
# ヘッダーでContent-ID追加(本文内容でcidにリンクをかけられる。)
img.add_header('Content-ID', '
')
# Data領域のメッセージにバウンダリー追加
data.attach(img)
# テキストタイプの本文内容
#msg = MIMEText("Hello world", 'plain')
# Html形式の本文内容(cidでもう添付ファイルをリンクする。)
msg = MIMEText("Hello Test
", 'html')
# Data領域のメッセージにバウンダリー追加
data.attach(msg)
# メッセージを確認
print(data)
# メールサーバとtelnet通信開始
server = smtplib.SMTP_SSL('smtp.gmail.com',465)
#server = smtplib.SMTP('smtp.gmail.com',587)
# メール通信時にデバッグ
server.set_debuglevel(1)
# ハローを一回しましょう。(意味なし)
server.ehlo()
# tls設定 - tls 587 ポートの場合
#server.starttls()
# ハローしましょう。
server.ehlo()
# ログインする。
server.login("id", "password")
# ハローしましょう。
server.ehlo()
# MAIL(送信者)設定
sender = data['From']
# RCPT(受信者)、リストタイプに送信
# 受信者追加
receiver = data['To'].split(",")
# CC受信者追加
if data['Cc'] is not None:
receiver += data['Cc'].split(",")
# BCC受信者追加
if data['Bcc'] is not None:
receiver += data['Bcc'].split(",")
# メールプロトコール上MAIL、RCPT、DATA順でメッセージを送信しなければならないが、sendmail関数で自動送信
server.sendmail(sender, receiver, data.as_string())
# QUITを送信して接続を終了。
server.quit()
作成が終わったら実行しましょう。
実行すれば上みたいにバウンダリーが作成されたことを確認できます。
メールがよく発送されたことを確認できます。
link - https://docs.python.org/3/library/smtplib.html
link - https://docs.python.org/3.4/library/email-examples.html
link - https://stackoverflow.com/questions/17759860/
ここまでPythonでメール(smtplib)を送信する方法に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Python] Seleniumライブラリを使う方法(自動ウェブテスト、ウェブスクレイピング)2021/10/25 19:29:00
- [Python] メール(smtplib)を送信する方法2020/07/27 18:38:43
- [Python] HttpConnection(requestsモジュール)でウェブサーバーで接続する方法2020/07/20 14:41:51
- [Python] Excel(openpyxl)を扱う方法2020/07/16 16:40:31
- [Python] ファイル圧縮、解凍(zipfile)する方法2020/07/14 19:14:22
- [Python] Apache cgiでPythonを使う方法2020/07/09 19:58:19
- [Python] Web serverを起動する方法(http.server)2020/07/09 00:13:13
- [Python] WebSocketを使う方法2020/07/07 17:29:18
- [Python] PythonとJavaのソケット通信する方法2020/07/03 18:35:50
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07