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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

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

Q&A

解決済

2回答

4176閲覧

pythonで添付ファイル付きのメール送信を行っていますが一部の送信先から添付ファイルがないとの指摘を受けています。

Miyamiya3

総合スコア0

Python 3.x

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

0グッド

1クリップ

投稿2021/06/11 12:06

編集2021/06/11 23:27

前提・実現したいこと

python3で添付ファイルをつけてメールの送信を行いたい。

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

30件の送り先に個別にメール送信でエクセルの添付ファイル(xxx.xlsx)を送信しています。
自身にCCをつけて送信していて自分自身へのメールでは添付ファイルが確認できますが、
2件の送付先から添付ファイルが無いとの指摘を受けています。また、一度限りではなく何度再送を行っても同様の現象が発生しています。
不具合の起きている送り先はyahooメールとocn.ne.jpです。

受信先でのメール設定などに起因する可能性もあるのではないかとも考えていますがよろしくお願いいたします。

尚、全く同じ内容のメールを同じSMTPサーバー経由でサンダーバードから送信をした場合には添付ファイルは問題なく届いたと報告がありました。

1.サンダーバードからのメール送信では正常に添付ファイルが届く(smtpサーバは同じ)
2.gmailからのメール送信では正常に添付ファイルが届く

pythonから送信のメールを転送してもらったところ以下の通り。

xxx.xlsxの場合は調査中です。(下記ではaaa.pdfの場合です。)

aaa.pdfをpythonで送信した場合も質問同様に添付ファイルが届かないという報告でした。報告のメールをそのまま転送してもらったところPart 1.2というファイルが添付されていました。ファイルサイズはもとの644,486 バイトと同じで、拡張子を.pdfに変更すると問題なく開くことができました。

該当のソースコード

python3

1 2import smtplib 3from email.mime.text import MIMEText 4from email.header import Header 5from email.mime.multipart import MIMEMultipart 6from email.mime.base import MIMEBase 7from email.utils import formatdate 8from email import encoders 9 10#smtpサーバ情報 11smtp_ad = 12smtp_po = 13smtp_id = 14smtp_ps = 15i = 0 16for index in dic.keys(): 17 time.sleep(1) 18 i += 1 19 #メール情報 20 ml_jp = 'utf-8' 21 ml_from = 22 ml_bcc = 23 ml_title = 24 ml_to = 25 ml_text = メール本文 26 27 #メッセージ編集 28 message = MIMEMultipart() #添付があるのでMultipart 29 message['Date'] = formatdate() 30 message['Subject'] = str(Header(ml_title,ml_jp)) 31 message['From'] = ml_from 32 message['To'] = ml_to 33 if ml_cc !=None: 34 message['Cc'] = ml_cc 35 message.attach(MIMEText(ml_text)) #本文(テキスト)をattach 36 37 for k in range(len(dic[index])): 38 39##dic[index]は "xxxx.xlsx"です。 40 41 #エクセルファイルを添付 42 attachment = MIMEBase('application','vnd.openxmlformats-',name = dic[index][k]) 43 file = open(dic[index][k],'rb') 44 attachment.set_payload(file.read()) 45 file.close() 46 encoders.encode_base64(attachment) #base64でエンコード 47 attachment.add_header('Content-Dispotion','attachment',filename = dic[index][k]) 48 message.attach(attachment) 49 50 try: 51 #メール送信 52 print(str(i)+'件目: '+index[1]+'様' +'に送信中...{}...{}様:Cc:{}'.format(index[2],index[3],index[4])) 53 smtp_obj = smtplib.SMTP_SSL(smtp_ad,smtp_po)#SSLを利用の場合はSMTP_SSL 54 smtp_obj.ehlo() 55 smtp_obj.login(smtp_id,smtp_ps) 56 smtp_obj.sendmail(ml_from,[ml_to]+[ml_bcc],message.as_string(),) 57 smtp_obj.close() 58 except Exception as E: 59 print("***** エラー内容 *****") 60 print("type: "+ str(type(E))) 61 print("args: " + str(E.args)) 62 print("message: " + E.message) 63 print("E自体: " + str(E)) 64 65print('送信完了') 66 67 68### 試したこと 69 70自分自身でyahooメールを取得して送信したところ添付ファイルが確認できた。 71 72### 補足情報(FW/ツールのバージョンなど) 73 74ここにより詳細な情報を記載してください。

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

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

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

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

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

takasima20

2021/06/11 12:28

とりあえず、相手のメーラーとメール表示形式(設定)の確認かなあ。
Miyamiya3

2021/06/11 12:39

お返事ありがとうございます。 受信者はメーラーが何かもわかっていないので厳密には確認が取れていません。 恐らくoutlookのデフォルト設定だと思われます。調べたところoutlookのデフォルト設定ではhtmlメールとなっているようなのですが、このあたりが影響するということはありますでしょうか。
hope_mucci

2021/06/11 16:23

ウィルス対策ソフトの有無も確認してください。 Excelファイルはマクロ実行で悪さすることができるので自動削除対象になっているかもしれません。
takasima20

2021/06/11 20:34

outlook ではある現象らしいですが、お話の状況では対策(メーラー環境の設定変更など)はむずかしそうですねえ。
guest

回答2

0

まず、原因がPythonなのかどうかを切り分けましょう。

切り分け方

添付ファイルが届かない相手を一人選び、以下の二通りの方法で添付ファイル付メールを送ってみる
方法1 outlookでエクセルの添付ファイル(xxx.xlsx)を添付して送信
本文には、添付ァイルがあるかどうかを確認して返信するように依頼
方法2 webmail(たとえばgmail)でエクセルの添付ファイル(xxx.xlsx)を添付して送信
本文には、添付ァイルがあるかどうかを確認して返信するように依頼

これで、添付ファイルが届いていないようであれば、Pythonは関係ないのでPython3.Xのタグを外しましょう。
Pythonで送信したときだけ添付ファイルが消えるのであれば、質問にそれを追加してください。

投稿2021/06/11 16:55

ppaul

総合スコア24666

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

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

Miyamiya3

2021/06/11 23:02

1.サンダーバードから送信したところ添付ファイルは正常に届きました。 2.gmailから送信したところ正常に届きました。 3.メール本文をそのまま転送してもらったところPart 1.2というファイルがついていました。 (転送で得られたのはxxx.pdfで質問とは別内容のもの) プロパティで調べたところ元のファイルサイズ644,486 バイトと同じでした。 また、Part 1.2をリネームして.pdfをつけたところ正常に開くことが出来ました。
Miyamiya3

2021/06/11 23:12

本文中のxxx.xlsxがどうかについては調査中です。
ppaul

2021/06/12 02:11

送信先は個人アドレスではなく企業アドレスですか。 そういう場合は、メールゲートウェイが以下のような処理行っている可能性があります。 https://www.cybersolutions.co.jp/news/20170324/ そういうようなセキュリティ対策をしている場合、送信元のアドレスや送信に使用したSMPTアプリの種類で、危険なメールだと判断して添付ファイルを無条件で削除する場合もあります。 そういうケースですと、Miyamiya3さんががんばっても、メールの受信者さんががんばっても、相手先にxlsxファイルが届くことはありません。届くようなら、そのセキュアメールゲートウェイは欠陥商品です。 そういう場合には、受信者さんからその会社の情報セキュリティ部門に相談するしかありません。
hope_mucci

2021/06/12 03:43

ppaulさんのコメントの通りメールゲートウェイでフィルタリングを行なっている場合、本文中に添付ファイルを削除した旨が書かれている可能性が高いです。確認してもらって下さい。 そのようなゲートウェイはパスワードつきzipファイルで送ると届くかもしれません。
Miyamiya3

2021/06/12 15:15

ppaulさん。送信先は個人事業主ですがメールソフトの設定も購入時に店舗に依頼して設定されているようです。例えば店舗購入時に付帯的について来るウイルス対策ソフトなどが本人の自覚無しに稼働している可能性は十分にあります。 hope_mucciさん。添付ファイル削除の旨は相手先に届いたメールをそのまま転送すると記載されているものでしょうか。 Zipファイルは試してみる価値がありそうですね。解凍出来るか心配ですが。 Next step 1.ファイルがフィルターで削除されているのではないか →本文中の表示を確認 2、パスワード付きzipで送信して届くか
hope_mucci

2021/06/12 16:47

削除の痕跡について、私が見たことのあるメールゲートウェイのシステムでは、問題のありそうな添付ファイルがあった場合 ・ブロック。メールごと削除する。 ・添付ファイルを削除したうえでユーザーへ転送。その際ゲートウェイが添付ファイルを削除したメッセージを本文末尾に残す。 ・ホワイトリストにアドレスがあれば素通り という処理を踏むものが多かったです。 パスワード付きZIPファイルはそのまま通しているシステムも多いです(悪意ある送信者からはパスワードつきZIPは送られてこない。パスワードが分からないから。自己解凍できるものは別です) パスワード付きZIPファイルを送信する際は、パスワードはメール以外の手段で送るのがベターです。メールしか手段がない場合は最低限別々のメールで送りましょう(ファイル添付したメールにパスワードを書くのは絶対ダメ)
hope_mucci

2021/06/12 17:12

あとできることがあるとすれば、thunderbirdでメール送信した時と全く同じヘッダを使って送信するくらいでしょうか。ウィルス対策ソフトのメールチェックはヘッダも見ていますから。 でもその場合はメールごとブロックか迷惑メール扱いになると思います。
ppaul

2021/06/13 06:39

送信先は個人事業主ですがメールソフトの設定も購入時に店舗に依頼して設定されているようです。 ということであると、その個人事業主さんい頼んでチェックをゆるめてもらうことは可能かもしれませんが、ゆるめすぎてマルウェアに感染するリスクが増えそうです。 送信先の方々が見るためだけに使っているのであれば、PDFとかテキストファイルに変換して添付するように、ご自身のコードを変更するという方法が良いような気がします。 受け取ったデータをエクセルとして利用している場合は、難しいですね。
Miyamiya3

2021/06/14 08:52

2件の内一件から転送でファイルをを受信しましたが、メール本文は届いているが添付ファイルは無く、削除については何ら警告されていない状態でした。 残念ながら入力フォームとして使用するためエクセルのまま送る必要がある制約付なので難しいです。
Miyamiya3

2021/06/14 08:58

ご相談にお応えいただきありがとうございました。ひとまず、メーラーの転送機能を使うことで目的は(不完全ながら)達成したので回答を締めました。
guest

0

自己解決

結果的に添付ファイルが消えてしまう現象の根本的な理由は不明でした。

根本的な解決ではありませんが、自分自身に一度メールを送り、サンダーバードのフィルター機能で転送を掛けたところ正常に届けることができました。

投稿2021/06/14 08:54

Miyamiya3

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問