2015-07-13 225 views
0

我想知道「通過python腳本發送帶附件的電子郵件的最佳方式是什麼」? 我應該用「」,並藉此命令行Python腳本 - 發送電子郵件

"mail -s "Test" [email protected] < file.txt" 

另一種選擇是https://docs.python.org/2/library/email-examples.html的smtplib?

哪個選項更好?

+1

我建議你使用庫(的smtplib)。這樣您的腳本將獨立於您運行它的平臺運行。 –

+0

您的命令將讀取要從'file.txt'發送的電子郵件。沒有跡象表明它會發送帶有附件的電子郵件。 – jfs

+0

相關:[如何發送電子郵件附件與python](http://stackoverflow.com/q/3362600/4279) – jfs

回答

1

Python將是更靈活的發送電子郵件的方式。而且,正如你已經使用Python,將是最明智的。不需要使用子進程來調用外部腳本(這可能是不安全的)。

您可以附加更多不同類型的文件,更好地控制機構的內容。如果你想要的話,你可以把它變成一個通用的函數或類,可以給文本和文件名,收件人等

如果你有一個像上面這樣的類,你可以將它導入到其他程序中,它可以用於調試或者發生錯誤時發送標誌(或者有趣的事情發生)。

我傾向於用它來通知我運行一些自動化過程的健康狀況。

另外@hiroprotagonist提到 - 這將使腳本平臺獨立。

從你鏈接的文檔此略有精簡下來的例子是你真正需要知道:

# Import smtplib for the actual sending function 
import smtplib 
# Here are the email package modules we'll need 
from email.mime.image import MIMEImage 
from email.mime.multipart import MIMEMultipart 

# Create the container (outer) email message. 
msg = MIMEMultipart() 
msg['Subject'] = 'Subject' 
me = '[email protected]' 
recipient = '[email protected]' 
msg['From'] = me 
msg['To'] = recipient 

# Assume we know that the image files are all in PNG format 
for file in pngfiles: 
    # Open the files in binary mode. Let the MIMEImage class automatically 
    # guess the specific image type. 
    fp = open(file, 'rb') 
    img = MIMEImage(fp.read()) 
    fp.close() 
    msg.attach(img) 

# Send the email via our own SMTP server. 
s = smtplib.SMTP('localhost') 
s.sendmail(me, recipient, msg.as_string()) 
s.quit() 
0

yagmail全部目的(我開發者)是使其很容易發送電子郵件特別是在HTML或附件需求方面。

請嘗試以下代碼:

import yagmail 
yag = yagmail.SMTP('[email protected]', 'password') 
contents = ['See my attachment below', '/home/you/some_file.txt'] 
yag.send('[email protected]', subject = 'Subject', contents = contents) 

通知神奇在這裏:contents是一個列表,在這裏等於文件路徑的項目會自動加載,MIME類型猜到了,和連接。

還有更多的魔法參與,比如容易嵌入圖片,無密碼腳本,無用戶腳本,簡單的別名,智能默認等等。我建議/鼓勵你閱讀它的github頁面:-)。隨意提出問題或添加功能請求!

您可以通過使用PIP安裝它得到yagmail:

pip install yagmail # Python 2 
pip3 install yagmail # Python 3