お世話になっております。
Gmailからファイルを複数添付して送信するコードがあるのですが、Windows Live メールで受信すると「.dat」というファイルに化けてしまいます。
WebのGmailやOutlook等では正常に添付出来ています。
添付ファイルの拡張子は「.xlsx」です。
Python
1from email.mime.text import MIMEText 2from email.mime.application import MIMEApplication 3from email.mime.multipart import MIMEMultipart 4 5def send_mail_attach(attach_files): 6 msg = MIMEMultipart() 7 msg['Subject'] = 'subject' 8 msg['To'] = 'to@domain.com' 9 msg['From'] = 'from@domain.com' 10 msg.attach(MIMEText('body')) 11 12 for attach_file in attach_files: 13 with open(attach_file, 'rb') as f: 14 part = MIMEApplication(f.read(), Name=basename(attach_file)) 15 msg.attach(part) 16 17 server = smtplib.SMTP('smtp.gmail.com', 587) 18 server.starttls() 19 server.login('address', 'password') 20 server.send_message(msg) 21 server.quit() 22 23send_mail_attach(['sample.xlsx', 'さんぷる.xlsx'])
そもそも受信するソフトが古すぎるかとは思うのですがそこは変えれないため、何か修正方法等あればご教示いただけますと幸いです。
よろしくお願い致します。
追記
ここが原因かは不明ですが、メールソースのDiffで異なっていた点を書きます。
・GMail側(成功側)
text
1Content-Type: multipart/mixed; boundary="===============2028351794590306117==" 2MIME-Version: 1.0 3Subject: 【{日本語}】 {日本語} 2021-04-14 4 5--===============2028351794590306117== 6Content-Type: text/plain; charset="utf-8" 7MIME-Version: 1.0 8Content-Transfer-Encoding: base64 9 10{文字列} 11--===============2028351794590306117== 12Content-Type: application/octet-stream; Name="{日本語}【{日本語}】20210414.xlsx" 13MIME-Version: 1.0 14Content-Transfer-Encoding: base64 15 16--===============2028351794590306117==--
・Windows Live メール側(失敗側)
text
1Content-Type: multipart/mixed; boundary="===============2028351794590306117==" 2MIME-Version: 1.0 3Subject: =?utf-8?b?{アルファベットと数値の文字列}=?= 4=?utf-8?b?{アルファベットと数値の文字列}=?= 5 6(GmailにはあるBoundaryで区切られた境界がまるまる無い。)
また1点書き忘れていたのですが、プログラムから自動で送信された場合Windows Live メールでdatになってしまいますが、Gmailから手動でファイルを添付してメールを送信した場合はWindows Live メールでも正常に添付出来ていましたので、コードの中で何か必要なパラメータが足りないのかなと推測しております。。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/13 09:51
2021/04/13 10:09 編集
2021/04/13 10:24
2021/04/13 10:31 編集
2021/04/14 01:19
2021/04/14 01:23
2021/04/14 02:21