2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonでメール作成・自動送信(添付ファイル)

Last updated at Posted at 2023-09-08

添付ファイルなして、送信対応は以下を参照してください。

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

添付ファイルのファイル名操作のために PathlibPath クラスをインポートします。
👆 今回は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()メソッドで、添付ファイルオブジェクトを指定して、オブジェクトに添付します。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?