1. 程式人生 > >Python模組探祕 Smtplib傳送帶有各種附件的郵件

Python模組探祕 Smtplib傳送帶有各種附件的郵件

這兩天對Python的郵件模組比較感興趣,於是就查了查資料。同時在實際的編碼過程中也遇到了各種各樣的問題。下面我就來分享一下我與smtplib的故事。

前提條件

我的上一篇博文裡面講解了,傳送郵件必須的條件。這裡同樣是適用的。大致就是要開啟郵箱的SMPT/POP服務等等。如果不明白,可以看看傳送純文字郵件。裡面講的還不錯。 :-)

核心知識點

因為今天主要講解的是如何傳送帶有附件的郵件,那麼核心肯定是附件了。怎麼才能發附件呢?

其實我們換個思路,就不難理解了。因為我們傳送郵件,經過了應用層–>> 傳輸層–>> 網路層–>>資料鏈路層–>>物理層。這一系列的步驟,全都變成了位元流了。所以無論是純文字,圖片,亦或是其他型別的檔案。在位元流的面前,都是平等的。所以我們傳送附件,也是按照發送純文字的模式來做就行,只不過加上一些特殊的標記即可。


\# 首先是xlsx型別的附件
xlsxpart = MIMEApplication(open('test.xlsx', 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename='test.xlsx')
msg.attach(xlsxpart)

\# jpg型別的附件
jpgpart = MIMEApplication(open('beauty.jpg', 'rb').read())
jpgpart.add_header('Content-Disposition', 'attachment'
, filename='beauty.jpg') msg.attach(jpgpart) \# mp3型別的附件 mp3part = MIMEApplication(open('kenny.mp3', 'rb').read()) mp3part.add_header('Content-Disposition', 'attachment', filename='benny.mp3') msg.attach(mp3part)

經過這三小段的程式碼,想必你已經很清楚了吧。無非就是使用MIMEApplication進行包裝一下,然後設定一下內容。最後新增到郵件內容。就是這幾步,就搞定了。

完整的程式碼

# coding:utf-8

#    __author__ = 'Mark sinoberg'
#    __date__ = '2016/5/26'
#    __Desc__ = 實現傳送帶有各種附件型別的郵件

import urllib, urllib2
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

username = '[email protected]'
password = 'XXXXXXXX'
sender = username
receivers = ','.join(['[email protected]'])

# 如名字所示: Multipart就是多個部分
msg = MIMEMultipart()
msg['Subject'] = 'Python mail Test'
msg['From'] = sender
msg['To'] = receivers

# 下面是文字部分,也就是純文字
puretext = MIMEText('我是純文字部分,')
msg.attach(puretext)

# 下面是附件部分 ,這裡分為了好幾個型別

# 首先是xlsx型別的附件
xlsxpart = MIMEApplication(open('test.xlsx', 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename='test.xlsx')
msg.attach(xlsxpart)

# jpg型別的附件
jpgpart = MIMEApplication(open('beauty.jpg', 'rb').read())
jpgpart.add_header('Content-Disposition', 'attachment', filename='beauty.jpg')
msg.attach(jpgpart)

# mp3型別的附件
mp3part = MIMEApplication(open('kenny.mp3', 'rb').read())
mp3part.add_header('Content-Disposition', 'attachment', filename='benny.mp3')
msg.attach(mp3part)

##  下面開始真正的傳送郵件了
try:
    client = smtplib.SMTP()
    client.connect('smtp.163.com')
    client.login(username, password)
    client.sendmail(sender, receivers, msg.as_string())
    client.quit()
    print '帶有各種附件的郵件傳送成功!'
except smtplib.SMTPRecipientsRefused:
    print 'Recipient refused'
except smtplib.SMTPAuthenticationError:
    print 'Auth error'
except smtplib.SMTPSenderRefused:
    print 'Sender refused'
except smtplib.SMTPException,e:
    print e.message

驗證結果

沒有什麼比來張圖片更有說服力的了。如圖
帶有各種附件的郵件結果圖

錯誤總結

我遇到的錯誤如下:

D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/mail/withappedix.py
Traceback (most recent call last):
  File "E:/Code/Python/MyTestSet/mail/withappedix.py", line 51, in <module>
    client.sendmail(sender, receivers, msg.as_string())
  File "D:\Software\Python2\lib\email\message.py", line 137, in as_string
    g.flatten(self, unixfrom=unixfrom)
  File "D:\Software\Python2\lib\email\generator.py", line 83, in flatten
    self._write(msg)
  File "D:\Software\Python2\lib\email\generator.py", line 115, in _write
    self._write_headers(msg)
  File "D:\Software\Python2\lib\email\generator.py", line 164, in _write_headers
    v, maxlinelen=self._maxheaderlen, header_name=h).encode()
  File "D:\Software\Python2\lib\email\header.py", line 410, in encode
    value = self._encode_chunks(newchunks, maxlinelen)
  File "D:\Software\Python2\lib\email\header.py", line 370, in _encode_chunks
    _max_append(chunks, s, maxlinelen, extra)
  File "D:\Software\Python2\lib\email\quoprimime.py", line 97, in _max_append
    L.append(s.lstrip())
AttributeError: 'list' object has no attribute 'lstrip'

Process finished with exit code 1

我的解決辦法是
receiver parameter was list type. either it should be list converted to string using join method or if it is a single recipient, then pass it as a string only

是的,就是receivers = ','.join(['[email protected]'])。這樣就搞定了。

也許,你遇到的錯誤不是我這個,那麼也不用擔心,我這裡有一份比較齊全的錯誤碼對照表。你可以對照著你的錯誤碼來查詢具體的錯誤原因。這樣有的放矢,效率會更高一點的。

在編碼的過程中,我也是遇到了很多意想不到的錯誤。而這些錯誤的錯誤碼對我們來說是很有用的。這對我們測試程式碼以及找到其中出錯的原因和有幫助。

(^__^) 嘻嘻……。這下字型夠大了吧。

相關推薦

Python模組探祕 Smtplib傳送帶有各種附件郵件

這兩天對Python的郵件模組比較感興趣,於是就查了查資料。同時在實際的編碼過程中也遇到了各種各樣的問題。下面我就來分享一下我與smtplib的故事。 前提條件 我的上一篇博文裡面講解了,傳送郵件必須的條件。這裡同樣是適用的。大致就是要開啟郵箱的SM

Python模組探祕之二: Smtplib傳送帶有各種附件郵件

轉自:http://blog.csdn.net/marksinoberg/article/details/51506308 這兩天對Python的郵件模組比較感興趣,於是就查了查資料。同時在實際的編碼過程中也遇到了各種各樣的問題。下面我就來分享一下我與smtplib的

Python模組探祕smtplib,實現純文字郵件傳送

今天學到了如何使用Python的smtplib庫傳送郵件,中間也是遇到了各種各樣的錯誤和困難,還好都一一的解決了。下面來談一談我的這段經歷。 配置你的郵箱 為什麼要配置郵箱呢?具體要配置什麼呢? 因為我們申請的一些免費郵箱都是預設不開啟smtp/pop

[Python]python3使用smtplib傳送郵件,帶xlsx附件

#encoding=utf8 import smtplib from email.mime.multipart import MIMEMultipart from email.header import Header from email.mime.text import M

python模組smtplib: 用python傳送SSL/TLS安全郵件

    轉載請註明原文出自 http://blog.csdn.net/zhaoweikid/    python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議進行了簡單的封裝。smtp協議的基本命令包括:    HELO 向伺服器標識使用者身份    M

python 傳送帶有附件郵件

    在selenium執行完成,想要把測試報告和截圖傳送指定的郵箱,需要先把測試報告和截圖資料夾打包成壓縮檔案然後一起傳送,下面就是程式碼: 1.壓縮檔案 import os,zipfile #壓縮檔案 def compression(): try:

Python smtplib傳送郵件 包含文字、附件、圖片等

解決之前版本的問題,下面為最新版 #!/usr/bin/env python # coding:gbk """ FuncName: sendemail.py Desc: sendemail with text,image,audio,application... Dat

Python標準庫(非常經典的各種模組介紹)

https://blog.csdn.net/liujinwei2005/article/details/76725422 0.1. 關於本書 0.2. 程式碼約定 0.3. 關於例子 0.4. 如何聯絡我們 核心模組 1.1. 介紹

傳送帶有附件的郵箱到騰訊企業郵箱

首先先加入maven依賴 <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1

python 利用 smtplib 傳送郵件方法

說明 python 自帶了 smtplib 庫 可以直接呼叫並進行郵件傳送 預設狀態下, python 利用 base64 進行使用者名稱密碼傳遞 測試期間, 可以開啟 debug 功能, 方便進行排錯 測試程式碼 impor

python 傳送帶各種附件郵件示例!

簡述下如何使用python傳送各種附件的郵件,比如word、excel、pdf、txt,以及在正文插入圖片等等 如下所示, 加群:960410445  即可獲取數十套PDF! # coding=utf-8 import smtplib from email.mime.text

PYTHON模組學習之smtplib

python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議進行了簡單的封裝。 smtp協議的基本命令包括:     HELO 向伺服器標識使用者身份     MAIL 初始化郵件傳輸 mail from:     RCPT 標識單個的郵件接收人;常在M

Python傳送多個附件和支援HTML及純文字內容的 Email 實現

由於工作中經常需要收發電子郵件,例如每日(周)的工作報告,測試報告,監控告警,定時提醒等等,大都已電子郵件的形式傳送。本文將實現一個 Python 的電子郵件傳送類,支援傳送多個附件(目錄),HTML或純文字內容,抄送收件人,多個接收者等功能。 程式碼實現 #!/usr/

python應用系列教程——python使用smtp協議傳送郵件:html文字郵件、圖片郵件、檔案附件郵件

全棧工程師開發手冊 (作者:欒鵬) python使用smtp協議傳送電子郵件。包含傳送html文字郵件、包含圖片附件的郵件,包含其他檔案附件的郵件。可設定郵件的收發人,主題,內容。並以163郵件為例,分別在python2.7和python3.6下進行試驗。

JSP實現傳送帶有附件郵件程式碼

SendAttanchment.jsp檔案--------------------------------測試檔案 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

python第三方庫PIL安裝的各種

圖像處理 pil 安裝 mage 說了 pycharm pyc -- 博客 PIL python的圖像處理庫,pycharm安裝屢次失敗,始終報錯 果斷換依舊報錯,查遍所有博客, 有給pip加參數的,pip install PIL --allow-extern

python入門-分類和回歸各種初級算法

學習 -- rst dip 混淆 random bottom gin 實踐 引自:http://www.cnblogs.com/taichu/p/5251332.html ########################### #說明: # 撰寫本文的原因是,筆

利用Pythonsmtplib和email發送郵件

odi rmi mtp 測試 div read 關系 format 三方登錄 原理 網上已經有了很多的教程講解相關的發送郵件的原理,在這裏還是推薦一下廖雪峰老師的Python教程,講解通俗易懂。簡要來說,SMTP是發送郵件的協議,Python內置對SMTP的支持,可以發送純

python appium操作手機及app各種方法

cati 鍵盤 操作 rem move 指向 cat apk `` 在網上看了些,一起整理了下,還是有些不夠全,但都比較常用了,先放出來吧: #鎖定屏幕時間秒 driver.lock(5) #將APP放置後臺 參數時間秒 driver.background_app(5) #

Python模塊--smtplib、email

https tle gpo www. title itl lib lan logs 參考帖子 https://www.cnblogs.com/xcblogs-python/p/5727238.html https://www.cnblogs.com/haq5201314