添付ファイルなして、送信対応は以下を参照してください。
Pythonでメール作成・自動送信(添付ファイル)
# ライブラリ設定
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from pathlib import Path
import os
# メール情報の設定
from_email ='test1@gmail.com'
to_email = 'test2@gmail.com' + ',' + 'xxx@gmail.com'
cc_mail = ''
mail_title = 'メール件名'
message = '''
ここにメール本文を記入
'''
# MIMEマルチパートでメールを作成
msg = MIMEMultipart()
msg['Subject'] = mail_title
msg['To'] = to_email
msg['From'] = from_email
msg['cc'] = cc_mail
msg.attach(MIMEText(message))
# ログイン名の取得/getpassで取得OK
# import getpass
# username = getpass.getuser()
# ログイン中のユーザー名
username = os.getlogin()
filepath= f"C:\\Users\\{username}\\Desktop\\HO\\test.csv"
filename = os.path.basename(filepath)
# ファイル読込
with open(filepath, 'rb') as f:
attach = MIMEApplication(f.read())
# ファイル添付
attach.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(attach)
# サーバを指定してメールを送信する
smtp_host = 'smtp.gmail.com'
smtp_port = 587
smtp_password = 'password'
server = smtplib.SMTP(smtp_host, smtp_port)
#サーバー・ポート接続
server.ehlo()
# TLS暗号化
server.starttls()
# SMTPサーバーログイン
server.login(from_email, smtp_password)
server.send_message(msg)
#SMTPサーバー遮断
server.quit()
print("メールを送信しました。")
解説
from email.mime.multipart import MIMEMultipart
email.mime.multipart
モジュールからMIMEMultpart
クラスをインポートします。
MIMEMultipartクラスを使用することで、1つのメールに何種類ものデータを「添付」する事ができます。
from email.mime.application import MIMEApplication
ファイルを添付するために from email.mime.application
モジュールからMIMEApplication
クラスをインポートします。
from pathlib import Path
添付ファイルのファイル名操作のために Pathlib
の Path
クラスをインポートします。
👆 今回はos
で実装しましたが、 Pathlib
よく利用しているようです。
msg = MIMEMultipart()
MIMEMultipartオブジェクトを生成して msg に格納します。
msg ~略~
msg.attach(MIMEText(message))
テキストメッセージはMIMETextクラスでオブジェクト化して、MIMEMultipartオブジェクトへ「添付」します。
# ファイル読込
with open(filepath, 'rb') as f:
attach = MIMEApplication(f.read())
添付ファイルfilepath
をバイナリファイル f
として開き、MIMEApplication
クラスの引数に f.read()
を指定して、添付ファイルオブジェクト attach
に格納します。
attach.add_header('Content-Disposition', 'attachment', filename=filename)
添付ファイルにヘッダ情報を付与。引数 'Content-Disposition', 'attachment' は、添付ファイルをダウンロードしてローカルに保存することを指定。
第三引数は添付ファイルの表示名を指定。
msg.attach(attach)
MIMEMultipartクラスのattach()
メソッドで、添付ファイルオブジェクトを指定して、オブジェクトに添付します。