2010-10-04 81 views
4

我試圖教自己如何通過構建對我有用的程序/腳本來編程。我正在嘗試重新編輯我在網上找到的腳本,通過使用python腳本(Source)通過gmail發送電子郵件。使用Python從gmail發送電子郵件

這個例子有一部分代碼來附加文件,我不想/需要。我調整了代碼,以便我不必附加任何文件,但是當我這樣做時,我會丟失電子郵件的正文。有關如何修改代碼以保持電子郵件正文的任何​​幫助/提示?

欣賞幫助。

+0

發表你有什麼 – 2010-10-04 00:55:56

+0

多米尼克,感謝您的答覆。我一直在通過評論不同的方式進行遊戲,並且能夠重新開始工作。原來,我不得不離開「msg.attach(MIMEText(text))」這行,這仍然讓我有點困惑,因爲我讀了msg.attach部分來附加文件,而不是電子郵件的正文。如果任何人都可以解釋,那將非常感激。 – SeanK137 2010-10-04 01:06:01

+1

您使用的示例代碼創建了多部分MIME消息。什麼是附件,包括郵件正文。如果您只想發送普通的單部分純文本或HTML郵件,則不需要任何MIME內容。我會用一些代碼發佈一個答案。 – kindall 2010-10-04 01:24:23

回答

5

您正在使用的示例代碼創建了多部分MIME消息。一切都是附件,包括郵件正文。如果您只想發送普通的單部分純文本或HTML郵件,則不需要任何MIME內容。這隻會增加複雜性。在你的示例的sendmail()調用中看到msg.as_string()的那一點?那麼,這只是將您創建的MIME對象轉換爲文本。如果你正在處理文本開頭,很容易就可以自己指定文本。

下面的函數與我用於在我寫的腳本中發送日誌文件的代碼類似。它採用純文本正文並將其轉換爲預格式化的HTML(以在Outlook中更好地工作)。如果要保持純文本,只需取出添加HTML標記的行,然後將Content-Type標題更改爲「text/plain」。

import smtplib 

def sendmail(sender, recipient, subject, body, server="localhost"): 
    "Sends an e-mail to the specified recipient." 

    body = ("<html><head></head><body><pre>%s</pre></body></html>" % 
      body.replace("&", "&amp;").replace("<", "&lt;")) 

    headers = ["From: " + sender, 
       "Subject: " + subject, 
       "To: " + recipient, 
       "MIME-Version: 1.0", 
       "Content-Type: text/html"] 
    headers = "\r\n".join(headers) 

    session = smtplib.SMTP(server) 
    session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)     
    session.quit() 
+0

謝謝kindall,感謝它! – SeanK137 2010-10-04 01:47:55

+0

不客氣,歡迎來到SO和Python。 – kindall 2010-10-04 02:16:19

1

我看到你有一些關於你做錯了什麼的線索。

在這種情況下,方法attach()指向電子郵件添加內容。這是令人困惑的,因爲當我們關於附加事物和電子郵件時,我們考慮添加額外的文件,而不是正文。

基於其他examples,似乎使用attach方法將文本添加到正文或文件到電子郵件。

因此,爲了回答您的問題,attach方法可以完成您認爲它所做的更多工作 - 它還會將文本添加到正文中。順便說一下,歡迎來到SO。聰明的選擇選擇Python學習如何腳本。

+0

謝謝Rafe,感謝它! – SeanK137 2010-10-04 01:47:59