1. 程式人生 > >如何通過GMail傳送郵件:smtplib的使用

如何通過GMail傳送郵件:smtplib的使用

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議族,它幫助每臺計算機在傳送或中轉信件時找到下一個目的地。通過SMTP協議所指定的伺服器,就可以把E-mail寄到收信人的伺服器上了,整個過程只要幾分鐘。SMTP伺服器則是遵循SMTP協議的傳送郵件伺服器,用來發送或中轉發出的電子郵件

SMTP類似於HTTP,在應用層是文字形式的。在UNIX程式設計藝術裡講過,要提倡明文的協議,這樣從肉眼就很容易分析,這樣就不需要編寫對應的可視編輯器即可實現除錯。

但可惜,當使用GMail的時候,通過WireShark分析,除了最初的握手協議外,具體傳輸

內容是無法得到的(如下圖)


1.建立TCP三路握手

2.SMTP自己的握手

3.客戶端啟動SSL握手 - 伺服器等待握手 - 開始SSL握手了

4.從這裡開始,所有內容是加密的了。

所以這裡只好開啟smtp的debug模式:smtp.set_debuglevel(1)。

這樣能夠在控制檯詳細地打印出互動過程:

所有互動都是客戶端‘SEND:****’開始,伺服器返回'reply:***'結束,是不是很像HTTP.

1.通過連線SMTP.gmail.com:25,然後伺服器返回伺服器相關資訊,並要求開啟SSL:‘STARTTLS’


2.開啟TLS,Gmail要求授權才能繼續操作:AUTH LOGIN PLAIN XOAUTO,當然TLS開啟後的所有內容無法通過WireShark等抓包工具捕獲的,所以不用擔心第三方會擷取這部分內容,這就是為什麼網頁也要提倡HTTPS的理由,無法被第三方擷取。


3.授權請求 - 返回授權成功哦。


4.授權成功後就可以開始傳送內容了:


5.最後記得要退出哦。。


每當我看多周邊人重新寫SMTP處理邏輯的時候,都想告訴他一聲:Python已經有相關庫了,為什麼不用它,而重新造輪子呢?是要學習這個協議的精髓麼?如果這樣,我還是建議你去讀HTTP吧,現在很多網路應用都依賴於HTTP,深入研究SMTP或者重新造輪子都是不可取的。

 如果不會Python怎麼辦?

能讀懂下面的程式碼就會了。

import smtplib
import sys
import email.mime.text
# my test mail
mail_username='
[email protected]
' mail_password='harktest' from_addr = mail_username to_addrs=('[email protected]') # HOST & PORT HOST = 'smtp.gmail.com' PORT = 25 # Create SMTP Object smtp = smtplib.SMTP() print 'connecting ...' # show the debug log smtp.set_debuglevel(1) # connet try: print smtp.connect(HOST,PORT) except: print 'CONNECT ERROR ****' # gmail uses ssl smtp.starttls() # login with username & password try: print 'loginning ...' smtp.login(mail_username,mail_password) except: print 'LOGIN ERROR ****' # fill content with MIMEText's object msg = email.mime.text.MIMEText('Hi ,I am leehark') msg['From'] = from_addr msg['To'] = ';'.join(to_addrs) msg['Subject']='hello , today is a special day' print msg.as_string() smtp.sendmail(from_addr,to_addrs,msg.as_string()) smtp.quit()


相關推薦

如何通過GMail傳送郵件smtplib的使用

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議族,它幫助每臺計算機在傳送或中轉信件時找到下一個目的地。通過SMTP協議所指定的伺服器,就可以把E-mail寄到

越過GFW,使用JavaMail通過Gmail傳送郵件

程式碼參考了:https://blog.csdn.net/licl19870605/article/details/8164401 Gmail要做兩處的設定: 1)啟用IMAP(如果只使用smtp協議傳送郵件,強烈懷疑此步可選) 根據 https://support.google.co

Python發送郵件smtplib、sendmail

postfix prot 找到 serve qmail 問題 配置文件 什麽 分享圖片 本地Ubuntu 18.04,本地Python 3.6.5, 阿裏雲Ubuntu 16.04,阿裏雲Python 3.5.2, smtplib,sendmail 8.15.2, 今天

telnet通過smtp傳送郵件

////////////////////////////////////CMD指令////////////////////////////////////////////// cmd telnet smtp.163.com 25   or &nb

通過javamailsenderimpl傳送郵件

參考文章:http://blog.csdn.net/qq_33556185/article/details/51028952 import javax.mail.internet.MimeMessage; import org.springframework.beans.factory.anno

Spring(非boot)通過ssl傳送郵件

參考:https://blog.csdn.net/liguo9860/article/details/6874040   我這裡就說一下使用Spring的JavaMailSender如何實現 1. 配置JavaMailSender @Bean public JavaM

js通過外掛傳送郵件

這個外掛為SmtpJS 官網地址為  https://www.smtpjs.com/ 方法很簡單 <script src="https://smtpjs.com/v2/smtp.js"> </script> Email.send( "[email&#

Zabbix 配置通過sendEmail傳送郵件報警

## 1、安裝sendEmail### 1.1、下載安裝sendEmail1. 通過Linux下載命令`wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz`(wget安裝命令:`rpm install w

用Spring的郵件封裝類JavaMailSenderImpl傳送郵件注意埠號不需要設定(設定了反而linux上釋出後傳送失敗)

===》###注意埠號不需要設定:》加不加埠:window都行,linux加了埠反而發不出去! 是的。配置了埠,Windows沒問題。linux就有問題了。仔細檢視錯誤資訊: 發現是 JavaMail API 程式碼問題。排除了是我的程式碼邏輯問題。 而且是埠超時問題。 看到這

利用JavaMail傳送郵件smtp.163.com

一、利用JavaMail傳送郵件案例: 1、maven專案結構: 2、先在pom.xml裡邊加入Javamail依賴,系統會根據座標自動下載mail包(前提是配置好了maven): 3、配置email.properties屬性檔案,主要是為了不更改程式碼的前提下,該改變傳送郵件的一些基本資訊:

Java(SpringCloud) 使用Thymeleaf渲染模板,通過Mailgun傳送郵件

好久沒發部落格了,忙東忙西的,堅持! 本文介紹Java使用Mailgun搭建傳送郵件的服務。 我把這個郵件服務放在了我的springCloudApplication(微服務Demo)專案的utilservice服務模組中。 原始碼地址:springCloudA

Python 使用Gmail傳送郵件

前言:2014-05-22記錄在hi baidu上,現在移過來 使用python向gmail發郵件 """ 傳送郵件 1: 需要提供傳送者的郵件、密碼;接收者地址; 2:步驟:

debian通過mailx傳送郵件

搭建的nagios,郵件報警可以通過以下幾種方式: 第一:使用簡訊通道   第二:使用伺服器本身的郵箱進行發郵件(例如centos使用sendmail,debian使用exim4) 第三:使用外部郵箱通過smtp傳送。  第一種當然最好,可是需要收費的。 第二種也可以發,可

通過javaMail傳送郵件,可選新增多個收件人,密送,抄送,多個附件,超實用

        自己通過學習多人的程式碼,並整理了一個簡單,呼叫方便的通過javaMail傳送郵件。只需填寫發件郵箱地址,密碼;收件人地址,附件,選擇是否儲存,設定自己傳送郵件時的暱稱就ok了。程式碼自動匹配設定smtp服務地址和埠。    傳送郵件需要郵箱地址和密碼,開啟P

python3 通過excel傳送郵件報錯解決辦法

前段時間使用python批量發郵件,通過excel獲取收件人資訊,結果發完後報錯如下:Traceback (most recent call last):  File "D:\python practice\傳送郵件  帶附件.py", line 46, in <mod

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

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

openssl使用SMTP向gmail傳送郵件

命令方式: 由於gmail使用ssl、tls等,所以連線時要使用tls或者ssl。這裡使用openssl而沒有用telnet。 直接連線smtp的預設埠587 連線後使用SMTP命令進行操作郵箱 這裡用到的有: EHLO AUTH LOGIN MAIL FROM:<

java傳送郵件(javaMail通過SMTP傳送郵件

java傳送郵件一般使用在註冊賬號時、或其他通知資訊時,網站會使用郵件定時傳送、或觸發傳送郵件通知使用者; 1、我是用的是maven開發,所以需要在pom檔案中定義jar包: <dependency> <groupId>javax.

windows平臺下通過blat傳送郵件用法小結

在linux平臺的命令列下可以使用mail命令來發送郵件,windows平臺沒有內建的命令,但可以使用開源的 blat,其官方主頁為 http://www.blat.net/ blat的使用非常簡單,僅需兩步 1.使用 "blat -install <server

pyhotn專案通過SMTP實現郵件傳送

#本例項是演示如何通過SMTP實現郵件的傳送 實現流程:建立SMTP伺服器——>登入郵箱——>傳送郵件——>關閉郵箱 #傳送郵件需要匯入的庫 import smtplib from email.mime.text import MIMEText #SMTP伺服器