2013-07-23 33 views
0

我想發送一個壓縮文件夾作爲電子郵件附件從gmail帳戶到gmail帳戶。腐敗的電子郵件附件與python

我發送簡單的.txt文件時沒有問題,但無論使用什麼壓縮類型,我都無法成功發送壓縮文件。即使我壓縮了一個文件,當我從Gmail下載它時,它也會損壞。我已經嘗試了幾件事情,比如先用ccrypt加密文件然後發送。該文件仍然損壞。

如果我通過瀏覽器正常發送電子郵件並使用相同的附件,則不適用。這讓我想知道它是Gmail還是我用來指責的代碼。

這是我的代碼:

#!/usr/bin/python 
import os, re 
import sys 
import smtplib 

from email import encoders 
from email.mime.multipart import MIMEMultipart 
from email.mime.base import MIMEBase 
from email.MIMEText import MIMEText 


SMTP_SERVER = 'smtp.gmail.com' 
SMTP_PORT = 587 


sender = '[email protected]' 
password = "password" 
recipient = sys.argv[1] 
subject = '' 
message = sys.argv[3] 

def main(): 
    msg = MIMEMultipart() 
    msg['Subject'] = sys.argv[2] 
    msg['To'] = recipient 
    msg['From'] = sender 

    part = MIMEText('text', "plain") 
    part.set_payload(message) 
    msg.attach(part) 

    session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) 

    session.ehlo() 
    session.starttls() 
    session.ehlo 

    session.login(sender, password) 

    fp = open(sys.argv[4], 'rb') 
    msgq = MIMEBase('application', "octet-stream") 
    msgq.set_payload(fp.read()) 
    fp.close() 
    # Encode the payload using Base64 
    filename=sys.argv[4] 
    msgq.add_header('Content-Disposition', 'attachment', filename=filename) 
    msg.attach(msgq) 
    # Now send or store the message 
    qwertyuiop = msg.as_string() 

    session.sendmail(sender, recipient, qwertyuiop) 

    session.quit() 

if __name__ == '__main__': 
    main() 

它被用作:

./send_email.py [email protected] "title" "body" attachment.rar 

,你應該在你的登錄信息填寫在腳本的頂部。

回答

1

評論# Encode the payload using Base64嘗試在此之後... encoders.encode_base64(msgq)

+0

快速的:)好樣的! – hakermania

+0

我幾天前寫了一個類似的腳本,面臨類似的問題:) – Verma

+0

同樣的問題,不適合我 – Mans