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

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

ただいまの
回答率

87.49%

Python Gmail添付ファイルがdat化してしまう

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 394

score 29

お世話になっております。

Gmailからファイルを複数添付して送信するコードがあるのですが、Windows Live メールで受信すると「.dat」というファイルに化けてしまいます。
WebのGmailやOutlook等では正常に添付出来ています。
添付ファイルの拡張子は「.xlsx」です。

from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart

def send_mail_attach(attach_files):
    msg = MIMEMultipart()
    msg['Subject'] = 'subject'
    msg['To'] = 'to@domain.com'
    msg['From'] = 'from@domain.com'
    msg.attach(MIMEText('body'))

    for attach_file in attach_files:
        with open(attach_file, 'rb') as f:
            part = MIMEApplication(f.read(), Name=basename(attach_file))
            msg.attach(part)

    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login('address', 'password')
    server.send_message(msg)
    server.quit()

send_mail_attach(['sample.xlsx', 'さんぷる.xlsx'])

そもそも受信するソフトが古すぎるかとは思うのですがそこは変えれないため、何か修正方法等あればご教示いただけますと幸いです。

よろしくお願い致します。

追記

ここが原因かは不明ですが、メールソースのDiffで異なっていた点を書きます。

・GMail側(成功側)

Content-Type: multipart/mixed; boundary="===============2028351794590306117=="
MIME-Version: 1.0
Subject: 【{日本語}】 {日本語} 2021-04-14

--===============2028351794590306117==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64

{文字列}
--===============2028351794590306117==
Content-Type: application/octet-stream; Name="{日本語}【{日本語}】20210414.xlsx"
MIME-Version: 1.0
Content-Transfer-Encoding: base64

--===============2028351794590306117==--

・Windows Live メール側(失敗側)

Content-Type: multipart/mixed; boundary="===============2028351794590306117=="
MIME-Version: 1.0
Subject: =?utf-8?b?{アルファベットと数値の文字列}=?=
=?utf-8?b?{アルファベットと数値の文字列}=?=

(GmailにはあるBoundaryで区切られた境界がまるまる無い。)

また1点書き忘れていたのですが、プログラムから自動で送信された場合Windows Live メールでdatになってしまいますが、Gmailから手動でファイルを添付してメールを送信した場合はWindows Live メールでも正常に添付出来ていましたので、コードの中で何か必要なパラメータが足りないのかなと推測しております。。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

Windows Live メールが原因である可能性は考えましたか?

https://answers.microsoft.com/ja-jp/windowslive/forum/livemail-email-send/%E3%82%A6%E3%82%A4%E3%83%B3%E3%83%89%E3%82%A6/df79d92b-404c-4679-9557-922f66981e93

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/04/14 10:19

    ご回答ありがとうございます。
    質問分を追記しました。よろしくお願い致します。

    キャンセル

  • 2021/04/14 10:23

    > Gmailから手動でファイルを添付してメールを送信した場合はWindows Live メールでも正常に添付出来ていました
    こちらは自動で添付したものと全く同じファイルですか?

    キャンセル

  • 2021/04/14 11:21

    はい、同じファイルになります。

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る