質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

329閲覧

python gmailによる自動送信

nt1

総合スコア2

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/06/06 07:38

編集2023/06/08 02:15

実現したいこと

他部門に完成した図面のpdf送信の簡略化

前提

pythonで他部門に完成した図面情報のpdfなどを添付して送信するシステムを作っています。
同じフォルダ内にいろいろな種類のpdfが保存されているため毎回ソースコードを編集するのは手間がかかるため、
inputで入力する際にそのファイルのパスを入力して少しでも手間を減らしたいなと考えています。
ここでいうinputで入力するものは
"C:\Users\Desktop\python\a.pdf"
のようにそのファイルでShift右クリックからパスのコピーでパスを取得したものを指しています。

ソースコード13, 15行目の変数pdf_path, drawing_pathのinputで入力したものがそのまま45行目のattachmentsに入るようにしたいです。

わからないため、ご回答よろしくお願いします。

発生している問題・エラーメッセージ

ソースコード45行目に現時点では同じフォルダ内のpdfを指定しているが、ソースコード13, 15行目の変数pdf_path, drawing_pathのinputで入力したものがそのまま45行目のattachmentsに入るようにしたいが、わからない。

python

1import smtplib 2from email.mime.text import MIMEText 3from email.mime.application import MIMEApplication 4from email.mime.multipart import MIMEMultipart 5from email import encoders 6from email.mime.base import MIMEBase 7from os.path import basename 8from email.utils import formatdate 9 10#入力用 11number = input("図面番号を入力してください") 12print(number, "が入力されました") 13pdf_path = input("添付する書類pdfファイルのパスをコピペで入力してください") 14print(pdf_path, "が設定されました") 15drawing_path = input("添付する図面pdfのパスをコピペで入力してください") 16print(drawing_path, "が設定されました") 17 18#メール設定など 19FROM = '@gmail.com' #ここにgmailアカウント 20PASSWORD = '' #ここにパスワード 21TO = '' #メールアドレス 22CC = [''] #CCメールアドレス 23SUBJECT = '' #メールの件名 24BODY = ''+'\n'+\ 25 '\n'+\ 26 'お疲れ様です。'+'\n'+\ 27 '以下の図面を出図いたします。'+'\n'+\ 28 '\n'+\ 29 str(number)+'\n'+\ 30 '\n'+\ 31 'よろしくお願いいたします。'+'\n'+\ 32 '\n'+\ 33 '自動送信' 34 35#メール内容処理 36msg = MIMEMultipart() 37msg['Subject'] = SUBJECT 38msg['From'] = FROM 39msg['To'] = TO 40msg['Cc'] = ','.join(CC) 41msg['Date'] = formatdate() 42msg.attach(MIMEText(BODY)) 43 44#添付ファイルのリスト 45attachments = ["file1.txt", "file2.txt", "a.pdf"] 46 47#添付ファイルについて 48for file_path in attachments: 49 #MIMEBaseオブジェクトの作成 50 part = MIMEBase("application", "octet-stream") 51 part.set_payload(open(file_path, "rb").read()) 52 encoders.encode_base64(part) 53 part.add_header("Content-Disposition", "attachment; filename = {file_path}") 54 msg.attach(part) 55 56#メール送信処理 57smtpobj = smtplib.SMTP_SSL('smtp.gmail.com', 465, timeout = 10) 58smtpobj.ehlo() 59smtpobj.login(FROM, PASSWORD) 60smtpobj.sendmail(FROM, TO, msg.as_string()) 61smtpobj.close() 62 63print("メールを送信しました") 64 65 66### 試したこと 67 68いろんなサイトを見たのですが、みなさん基本的に.txtや.pdfなど直接パスを入力していてinputでパスを入力するようなプログラムが見つかりませんでした。 69 70### 補足情報(FW/ツールのバージョンなど) 71 72ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2023/06/06 07:45

このままではコードが読めないので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
nt1

2023/06/06 08:01

助言ありがとうございます。編集しました。
TakaiY

2023/06/06 08:54

「ファイルのパスをコピペで入力してください」に対する入力は、どのような値を入力してもらっていますか? 「同じフォルダ内のファイルの名前でないとエラーが出てしまう」原因はそれでしょうね。
nt1

2023/06/07 23:43

返信遅くなりすみません。 "C:\Users\Desktop\example\example.pdf" このように指定のファイルをShift+右クリックからパスのコピーしたものを入力することを想定しています。 同じフォルダ内のファイルの名前でないとエラーが出てしまう は表現として正しくなかったと思います。無視してください。 よろしくお願いします。
guest

回答2

0

すいません、
途中省略したのでcwdに入る部分は
現在実行中のスクリプトがあるディレクトリの
パスを取得する関数の戻り値が入ります

投稿2023/06/08 00:59

04Rhadamanthus

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

添付ファイルを2つ送信することは可能でしょうか?

こちらについては回答出来ます
24行目から30行目のようにすれば複数の添付ファイルを送る事ができます

※途中省略しています

python

1... 2 3#メール設定など 4FROM = '@gmail.com' #ここにgmailアカウント 5PASSWORD = '' #ここにパスワード 6TO = #メールアドレス 7CC = '' #CCメールアドレス 8SUBJECT = '' #メールの件名 9BODY = '' #本文 10 11#メール内容処理 12msg = MIMEMultipart() 13msg['Subject'] = SUBJECT 14msg['From'] = FROM 15msg['To'] = TO 16msg['Cc'] = ','.join(CC) 17msg['Date'] = formatdate() 18msg.attach(MIMEText(BODY)) 19 20# 添付ファイルのリスト 21attachments = ["file.1.txt", "file2.txt"] 22 23# 各添付ファイルについて 24for file_path in attachments: 25 # MIMEBaseオブジェクトの作成 26 part = MIMEBase("application", "octet-stream") 27 part.set_payload(open(cwd + "/" + file_path, "rb").read()) 28 encoders.encode_base64(part) 29 part.add_header("Content-Disposition", f"attachment; filename={file_path}") 30 msg.attach(part) 31 32...

投稿2023/06/06 11:56

04Rhadamanthus

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nt1

2023/06/08 00:49

返信遅れてすみません。回答ありがとうございます。 入力したところ、27行目のcwdでエラー 28行目のencodersにエラーが出ました。28行目はfrom email import encoders にてエラーが消えたのですが、cwdの部分は波線が消えませんでした。 なにかわかるでしょうか?
nt1

2023/06/08 00:55

すみません。こちらで判明しました。大丈夫です。
04Rhadamanthus

2023/06/08 01:01

すいません 途中省略したので cwdに入る値は 現在実行中のスクリプトがある パスを返す関数の戻り値が入ります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問