1. 程式人生 > >Python模組探祕之smtplib,實現純文字郵件的傳送

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

今天學到了如何使用Python的smtplib庫傳送郵件,中間也是遇到了各種各樣的錯誤和困難,還好都一一的解決了。下面來談一談我的這段經歷。

配置你的郵箱

為什麼要配置郵箱呢?具體要配置什麼呢?

因為我們申請的一些免費郵箱都是預設不開啟smtp/pop協議的。
SMTP是發郵件使用到的計算機網路中應用層協議中的一個;而POP則是收郵件時使用到的計算機網路中的應用層協議的其中一個。這都是理論性的知識了,上過計算機網路這門課的想必都知道,就不多說了。

配置就是要開啟這項服務。否則我們就不能實現用Python程式碼來控制傳送和接收郵件了。

我們在配置完成之後,系統會提示給我們一個郵箱客戶端的授權碼。作用就是我們登陸的時候替代原來的登陸密碼。大家一定要完善儲存咯。我這裡採用的是163的郵箱,所以是可以自己設定這個授權碼的。

使用程式碼發郵件

還是按照,先看程式碼再研究的策略。如下:

# coding:utf-8

import smtplib
from email.mime.text import MIMEText
from email.header import Header



"""
請確保自己的郵箱的smtp協議開啟,都則會出現認證的錯誤的,如ssh等
"""


sender = "[email protected]"
# 收件人,可以是多個
receivers = ['[email protected]']

# 三個引數:第一個為純文字,第二個plain設定文字格式,第三個為編碼格式
message = MIMEText('這裡是傳送的郵件的主要的內容。Pure Text Here!','plain','utf-8') message['From'] = Header('來自Mark','utf-8') message['To'] = Header('測試標題','utf-8') subject = '哈哈哈哈哈哈,這是郵件的主題 ' message['Subject'] = Header(subject,'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect('smtp.163.com',25) smtpObj.login(sender,'你的客戶端授權碼'
) smtpObj.sendmail(sender,receivers,message.as_string()) smtpObj.quit() print '郵件已成功傳送了' except smtplib.SMTPException,e: print e.message

測試的結果:

D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/mail/PureText.py
郵件已成功傳送了

Process finished with exit code 0

這裡寫圖片描述

確實是成功傳送了的。

程式碼探查

下面就來深入的研究一下發送郵件實現的流程吧。我們注意到了,最最主要的是下面的這樣一段程式碼。

    smtpObj = smtplib.SMTP()
    smtpObj.connect('smtp.163.com',25)
    smtpObj.login(sender,'你的客戶端授權碼')
    smtpObj.sendmail(sender,receivers,\
    message.as_string()
    smtpObj.quit()

不難看出,主要是經歷了下面的這些流程:

  • 獲得SMTP服務
  • 連線伺服器
  • 模擬客戶端登陸
  • 實現傳送郵件
  • 退出登入

    其中核心的也就是客戶端登陸和傳送郵件的兩個步驟。模擬登陸的時候需要注意的就是使用你自己的授權碼就行了,沒什麼難度。而傳送郵件的時候需要注意一下引數。發件人是一個,而收件人是一個列表,裡面可以有很多個收件人(這樣可以藉助這個列表實現郵件的群發)。

其他需要注意的也就是使用MIME型別的資料,和使用utf-8編碼就行了。屬於非智力相關的內容。所以不用太在意。會用就可以了。

這樣看來,發個郵件什麼的也不是很難嘛。(^__^) 嘻嘻……

錯誤總結

  • 錯誤一:500、530等5開頭的錯誤,大致為什麼ssh異常啊什麼的。有點web常識的都知道,5開頭的錯誤程式碼一般都是伺服器內部的錯誤,所以這基本上可以判斷出我們的程式碼其實沒有出錯。我們主要的排錯方向應該是伺服器端了(當然了,凡是沒有任何的絕對,但這種情況出現的概率確實是很小的)。這時,我們要檢查一下自己的郵箱的SMTP/POP服務開啟了沒有啊等等

  • 錯誤二 :授權碼沒有寫或者填寫成了自己的郵箱之前的密碼,錯誤提示一般都是認證相關的。這一點屬於低階錯誤了。因為在配置完自己的SMTP/POP服務之後,系統會發還一個簡訊提示,告知使用者要使用授權碼替代原密碼登陸郵箱。所以使用你的授權碼進行登入唄。

  • 錯誤三:程式碼中的錯誤。這就更加的不應該了,少寫了必填項,或者編碼沒新增等類似的錯誤是我們應該極力避免的,所以儘量保證自己的程式碼的正確。

相關推薦

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

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

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

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

PYTHON模組學習smtplib

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

Java學習筆記--------IO流字元流實現文字拷貝

字元流 輸入流:Reader,FileReader 輸出流:Writer,FileWriter 字元流只能處理純文字,全部為可見字元(.txt或者.html)。下面實現純文字的拷貝: public class CopyFileDemo { public sta

Python模組學習Timer定時任務,函式自調實現定時獲取部落格園部落格瀏覽量

Timer定時任務 下面是Timer函式的官方doc介紹資訊 “”” Call a function after a specified number of seconds: t = Timer(30.0, f, args=No

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

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

python工具編寫paramiko實現SSH遠程連接

編寫 range get missing dede 連接 and try 遠程 客戶端實現有三種方式: 1:用賬號密碼登陸 1.1直接使用SSHClient對象的exec_command()在服務端執行命令: 代碼實現: import paramikoimport sysd

python模組分析itertools

前言 itertools模組是python內建的迭代器模組,定義了可生成多種迭代器的函式,用來代替可迭代物件的遍歷等操作,節約記憶體。 迭代器函式的型別 無限迭代器:包括count、cycle、repeat,用於生成無限序列的迭代器; 有限迭代器:接收一個或多個序列作為引數,進行組合、分組和過

python裝飾器原理實現,作用,與例程

裝飾器的功能 當需要對一段寫好的程式碼新增一段新的需求的時候的時候我們就可以用裝飾器實現。 def set_func(func): def call_funct(): print("---這是許可權驗證1---") print("---這是許可

python模組基礎getpass模組

getpass模組 getpass模組提供了可移植的密碼輸入,一共包括下面兩個函式:   1. getpass.getpass()   2. getpass.getuser()     getpass.getpass([prompt[, stream]])   

htmlmarquee實現圖片文字滾動效果詳解

                在製作網頁的時候,很多情況下會遇到需要某一個文字或者圖片像廣告那樣水平或者垂直的滾動,這樣的效果JavaScript可以製作,但是比較麻煩,直接看那些程式碼會感覺到非常的複雜。這裡我們來介紹一種簡單的方式實現這樣效果,他就是HTML標籤中的marquee,他其實是一個容器標籤。

Python模組介紹base64模組、Queue模組

1、base64模組 base64是一種編碼方式,它使用的碼字對應表中一共有64個碼元,分別是A~Z、a~z、0~9、+ 和 / ,一些base64的變種大多數是在最後的兩個字元/和+上做功夫,將其

Python SMTP 傳送文字郵件

利用Python的smtp和email模組傳送郵件 最近,開始學習python,因為從未接觸過python,所以這幾天抽時間看了一下基礎知識,然後就看到了python郵件這一塊。 因為使用qq郵箱傳送,所以也碰到了一些問題。所以,在此對使用python,利用qq郵箱傳送郵件

Python學習12_python3.4.3實現txt文字指定字元提取

TXT文件中提取指定文字 在每天上班的路上,都會在地鐵上看看高曉鬆的《魚羊野史》。很有意思的一本書,口頭語言記錄成冊,來自《曉鬆奇談》。每天都會按著日期看,今天是哪一天就翻到哪一天,看看歷史上的今天發生了什麼事,大千世界,天文地理,古今中外,體育娛樂,歷史趣聞,明星軼事,無

電商專案springmvc實現文字上傳到FTP伺服器

1、前端 富文字圖片上傳檔案 <form name="form1" action="/manage/product/richtext_img_upload.do" method="post" enctype="multipart/form-data"> <input t

python模組分析hashlib加密(二)

前言 hashlib模組是py3.+用來對字串進行hash加密的模組,核心演算法是md5,明文與密文是一一對應不變的關係;用於註冊、登入時使用者名稱、密碼等加密使用。 模組分析 hashlib模組有多種加密演算法如:'md5', 'sha1', 'sha224', 'sha256', 'sha384',

Web開發html2canvas 實現JS網頁截圖簡單例子

       自己修改其中的 test.js (主要是其中的一些庫的路徑) 把test.js external資料夾 src資料夾 放在同一目錄下 var h2cSelector, h2cOptions; (function(document,

python模組系列

subprocess – 建立附加程序 subprocess模組提供了一種一致的方法來建立和處理附加程序,與標準庫中的其它模組相比,提供了一個更高階的介面。用於替換如下模組: os.system() , os.spawnv() , os和

Python3.5同時給多人傳送文字郵件

關鍵點1:收件人郵箱msg_to=['[email protected]','[email protected]','[email protected]'],以列表的方式給出。 關鍵點2:msg['To'] =','.join(msg_to)。 關鍵點3:s.s

Spring 4傳送HTML/文字郵件並攜帶附件

applicationContext檔案配置內容如下: <bean id="emailTemplate" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property