さくらインターネットのユーザ文字列が埋め込みサンプルとして適しているので使用しました。 デフォルトでは、utf-8 で Subject がエンコードされるので email.charset.Charset クラスのメソッドで iso-2022-jp に変換しています。Subject: =?utf-8?b?UHl0aG9uIOOBi+OCiSBVVEYtOCDjga7mloflrZfliJc=?=文字列の埋め込みは f-string です。
# ************************* # 型と内容の確認 # ************************* def typrint(obj): print(type(obj)) print(obj) print("") # ************************* # ライブラリ # ************************* import smtplib from email.mime.text import MIMEText import datetime from email.charset import Charset # ************************* # 日付のテスト # ************************* # 日付だけ欲しい場合はこちら today = datetime.date.today() typrint(today) # datetime オブジェクトは date オブジェクトおよび time オブジェクトの全ての情報が入っている単一のオブジェクトです。 today = datetime.datetime.today() typrint(today) # 書式 : https://docs.python.jp/3/library/datetime.html#strftime-strptime-behavior strdate = today.strftime("%Y-%m-%d %H:%M:%S") typrint(strdate) # ************************* # メール用キャラクタセット # ************************* jis='iso-2022-jp' # ************************* # 本文 # ************************* text = "Python\n日本語\nUTF-8\n" text += "Python文字列操作マスター\nhttps://qiita.com/tomotaka_ito/items/594ee1396cf982ba9887" text += "https://qiita.com/tomotaka_ito/items/594ee1396cf982ba9887" text = text.encode(jis) # iso-2022-jp でテキスト全体をエンコード typrint(text) msg = MIMEText(text, 'plain', jis) # メール送信用データのベースを作成 # ************************* # 送信用情報 # ************************* user = "ユーザ" # さくらインターネットのユーザ password = "パスワード" port = 587 to = "宛先メールアドレス" # ************************* # メールヘッダ # ************************* charset = Charset(jis) # Subject 用エンコードに使用( これをしないと utf-8 が使用される ) msg["Subject"] = charset.header_encode("Python から UTF-8 の文字列 : " + strdate ) msg["From"] = f"{user}@{user}.sakura.ne.jp" msg["To"] = to # ************************* # 確認用出力 # ************************* print(msg) # ************************* # メール送信 # ************************* try: smtp_server = smtplib.SMTP(f"{user}.sakura.ne.jp",port) smtp_server.starttls() smtp_server.login(f"{user}@{user}.sakura.ne.jp", password) smtp_server.send_message( msg ) smtp_server.quit() print("メールを送信しました") except Exception as err: print(err) print("メール送信に失敗しました" )
▼ 出力結果
<class 'datetime.date'> 2018-04-22 <class 'datetime.datetime'> 2018-04-22 20:30:27.176934 <class 'str'> 2018-04-22 20:30:27 <class 'bytes'> b'Python\n\x1b$BF|K\\8l\x1b(B\nUTF-8\nPython\x1b$BJ8;zNsA`:n%^%9%?!<\x1b(B\nhttps://qiita.com/tomotaka_ito/items/594ee1396cf982ba9887https://qiita.com/tomotaka_ito/items/594ee1396cf982ba9887' Content-Type: text/plain; charset="iso-2022-jp" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: =?iso-2022-jp?b?UHl0aG9uIBskQiQrJGkbKEIgVVRGLTggGyRCJE5KODt6TnMbKEIgOiAyMDE4LTA0LTIyIDIwOjMwOjI3?= From: ユーザ@ユーザ.sakura.ne.jp To: 宛先メールアドレス Python $BF|K\8l(B UTF-8 Python$BJ8;zNsA`:n%^%9%?!<(B https://qiita.com/tomotaka_ito/items/594ee1396cf982ba9887https://qiita.com/tomotaka_ito/items/594ee1396cf982ba9887 メールを送信しました
|
【Pythonの最新記事】
- Python : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- Python : shift_jis の3列の csv フォーマットのデータを ttk.Treeview に表示する
- Python : ttk.Treeview で表形式を使用して環境変数の一覧表示
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 1 )
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 4 ) : リダイレクトと関数とログ出力
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 3 ) : cgi.FieldStorage() から ディクショナリ
- XAMPP + Python( 3.8 ) でWEBアプリの基礎部分構築 : その ( 2 ) : QUERY_STRING と 画面定義
- Python + MySQL + IFRAME + Bootstrap : 問い合せ WEB アプリテンプレート
- MySQL Connector/Python の使用方法概要のまとめ
- Python3 : 言語的デザインの特徴と要点
- Python ドキュメントに沿った、テキストファイル読み込みの理解
- Python 3.6 で GET/POST メソッドを想定した CGI 用の簡易テンプレートを作成してみました
- Eclipse + Python(Pydev) : pywin32(COM使用の為) + MySQL Connector/ODBC でループ処理をしながら更新
- Eclipse + Python(Pydev) : MySQL Connector/Python でループ処理をしながら更新
- Pleiades Eclipse 4.7 Oxygen で Python を使って MySQL にアクセスする
- Python 3.4 : インストールと最初にする事( Windows )
- Python3.x : URL を読み出す( bytes から string )
- Python3.1 : URLを読み出して、バイナリのままファイル出力する
- Python3.1 : クッキーを保持して二つの URL にアクセスする
- Python3.1 : URLを読み出してファイルに出力