1. 程式人生 > >Python SMTP模組使用QQ郵箱傳送郵件

Python SMTP模組使用QQ郵箱傳送郵件

前言:

    嘗試實現《Python程式設計快速上手  讓繁瑣工作自動化》書籍中的第十六章習題部分,使用python傳送email資訊,嘗試傳送Html,附件和正文都同時存在的郵件,使用QQ郵箱,最終實現根據表格標記對不同使用者發不同郵件功能。(根據之前編寫的讀取表格示例可以實現,思路是讀取聯絡人,郵箱,標誌位,根據標誌位判斷使用不同郵件模板傳送,就不程式設計實現了)

過程:

首先確認QQ郵箱 smtp地址,埠:QQ郵箱的POP3與SMTP伺服器是什麼?

QQ郵箱 POP3 和 SMTP 伺服器地址設定如下:

郵箱POP3伺服器(埠995)SMTP伺服器(埠465或587)
qq.compop.qq.comsmtp.qq.com
SMTP伺服器需要身份驗證。

    根據提示開啟相關服務,選擇生成授權碼,得到後用於後續程式碼登陸部分

    整體流程也比較簡單,順序流程:登陸smtp伺服器-》輸入賬號密碼資訊-》確定收發件人資訊-》填寫主題、正文和附件-》傳送並退出。附程式碼

#! python3
"""
    此指令碼嘗試實現《Python程式設計快速上手  讓繁瑣工作自動化》書籍中的第十六章習題部分
    嘗試使用python傳送email資訊,嘗試傳送Html,附件和正文都存在的郵件,使用QQ郵箱
    最後修改時間:2018-06-23  最後修改作者:QiYe005
"""
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart   

import os,sys
from nt import chdir#判斷目錄是否存在並切換目錄

print("指令碼執行開始")
#登陸郵件伺服器
smtpObj=smtplib.SMTP('smtp.qq.com', 587)
smtpObj.ehlo()
smtpObj.starttls()
#傳入相應的賬號密碼資訊
smtpObj.login('
[email protected]
', '生成的授權碼') #郵件收發信人資訊 sender = '[email protected]'#發件人資訊 receivers = ['[email protected]']#收件人資訊 #完善發件人收件人,主題資訊 message=MIMEMultipart() message['From'] = formataddr(["發件人暱稱",sender]) message['To'] = formataddr(["收件人暱稱",''.join(receivers)]) subject = 'Python SMTP 郵件, 包括html和附件整體混合郵件' message['Subject'] = Header(subject, 'utf-8') #正文部分 textmessage = MIMEText('<p>Python SMTP2 ,html文字</p>'+ '<p>主要參考: <a href="https://www.cnblogs.com/saneri/p/5845048.html">Python SMTP郵件模組</a></p>'+ '<p><img src="G:\test_Python\AutomateTheBoringStuffWithPythonTest\16EmailAndMessageTest\picture001.jpg"/></p>','html', 'utf-8') message.attach(textmessage) #附件部分,此處嘗試新增txt,圖片,word,pdf,表格,音樂文4類 workLoc = os.path.join('G:\\', 'test_Python','AutomateTheBoringStuffWithPythonTest','16EmailAndMessageTest') print('預設存放表格路徑為:'+str(workLoc)) #檢查路徑有效性 if (os.path.exists(workLoc))&(os.path.isdir(workLoc)): #嘗試改變當前工作路徑: chdir(workLoc) print('預設工作路徑有效,改變當前工作路徑為:'+str(os.getcwd())) else: print('預設工作路徑無效,請從新檢查') sys.exit() #嘗試新增txt附近 textFile='text001.txt' print("文字附件檔名為:%s" %textFile) textFileLoc=os.path.join(workLoc,textFile) textAtt= MIMEText(open(textFileLoc, 'rb').read(), 'base64', 'utf-8') textAtt["Content-Type"] = 'application/octet-stream' # 這裡的filename可以任意寫,但是實際測試如果線上檢視及下載檢視,名稱預設為此處設定的名字,所以後續直接就是原始附件名,方便下載、線上檢視 textAtt.add_header('Content-Disposition', 'attachment', filename=textFile) message.attach(textAtt) #嘗試新增圖片附件 pictureFile='picture001.jpg' print("圖片附件檔名為:%s" %pictureFile) pictureFileLoc=os.path.join(workLoc,pictureFile) pictureAtt = MIMEApplication(open(pictureFileLoc,'rb').read()) pictureAtt.add_header('Content-Disposition', 'attachment', filename=pictureFile) message.attach(pictureAtt) #嘗試新增word附件 wordFile='word001.doc' print("word附件檔名為:%s" %wordFile) wordFileLoc=os.path.join(workLoc,wordFile) wordAtt= MIMEText(open(wordFileLoc, 'rb').read(), 'base64', 'utf-8') wordAtt.add_header('Content-Disposition', 'attachment', filename=wordFile) message.attach(wordAtt) #嘗試新增表格附件 sheetFile='sheet001.xls' print("表格附件檔名為:%s" %sheetFile) sheetFileLoc=os.path.join(workLoc,sheetFile) sheetAtt= MIMEText(open(sheetFileLoc, 'rb').read(), 'base64', 'utf-8') sheetAtt.add_header('Content-Disposition', 'attachment', filename=sheetFile) message.attach(sheetAtt) #嘗試新增pdf附件 pdfFile='pdf001.pdf' print("表格附件檔名為:%s" %pdfFile) pdfFileLoc=os.path.join(workLoc,pdfFile) pdfAtt= MIMEText(open(pdfFileLoc, 'rb').read(), 'base64', 'utf-8') pdfAtt.add_header('Content-Disposition', 'attachment', filename=pdfFile) message.attach(pdfAtt) #嘗試新增聲音wav附件 musicFile='music001.wav' print("表格附件檔名為:%s" %musicFile) musicFileLoc=os.path.join(workLoc,musicFile) musicAtt= MIMEApplication(open(musicFileLoc,'rb').read()) musicAtt.add_header('Content-Disposition', 'attachment', filename=musicFile) message.attach(musicAtt) #傳送郵件操作 smtpObj.sendmail(sender,receivers, message.as_string()) smtpObj.quit() print("指令碼執行結束")

效果如下:


查詢是否登入成功可通過QQ郵箱-》已傳送-》檢視發信投遞狀態檢視。


總結:

   過程中遇到了message['To'] 部分程式碼錯誤無法傳送,自動歸檔到草稿箱的問題;短時間頻繁登陸傳送無意義郵件被認為是垃圾郵件的問題,通過修改程式碼和郵件內容均可解決。最後就是html程式碼本人知識欠缺,新增圖片失敗,如果大神路過請留言改正。


參考:

相關推薦

python怎麼用qq郵箱傳送郵件

使用SSL的通用配置如下: 接收郵件伺服器:pop.qq.com ,使用SSL,埠 995 傳送郵件伺服器: smtp.qq.com,使用SSL,埠 465或 587 賬戶名:QQ郵箱賬戶名(不用加“@qq.com”) 步驟一: 去設定-->賬戶-》找到POP3/IM

Python SMTP模組使用QQ郵箱傳送郵件

前言:    嘗試實現《Python程式設計快速上手  讓繁瑣工作自動化》書籍中的第十六章習題部分,使用python傳送email資訊,嘗試傳送Html,附件和正文都同時存在的郵件,使用QQ郵箱,最終實現根據表格標記對不同使用者發不同郵件功能。(根據之前編寫的讀取表格示例可以

PythonQQ郵箱傳送郵件時授權碼問題

QQ郵箱最新推出了一個授權碼,需已驗證的手機號向QQ郵箱伺服器傳送一條簡訊獲得。該授權碼用於第三方客戶端登入,代替了第三方登入時使用的個人郵箱密碼。 在測試過程中遇到兩個問題: 1.提示需建立SSL安全連線。於是將smtplib.SMTP() 改成了smtplib.SMT

python 3.6.3 , 使用QQ 郵箱傳送郵件

示例程式碼:#coding=utf-8 import smtplib from email.mime.text import MIMEText msg_from='[email protec

Springboot2.0.4呼叫qq郵箱傳送郵件

開場白:沒記錯的話,用不同框架開發一個發郵箱的功能,都會遇到多多少少的問題,這次也不能例外,否則就沒有意義了。 今天用springboot2.0.4開發發郵件功能,遇到了以下三個坑 專案中添加了該依賴,但是仍舊找不到 下面的物件,一直說該物件沒有被發現,後來

CI框架中QQ郵箱傳送郵件

public function qq(){       $this->load->library('email');       $config['protocol'] = 'smtp';

Python3利用SMTP使用QQ郵箱郵件

Python建立 SMTP 物件語法如下:smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )引數說明:    host: SMTP 伺服器主機。 你可以指定主機的ip地址或者域名如:runoob.com,這

flask_email實現QQ郵箱傳送郵件

直接上程式碼 from flask import Flask from flask_mail import Mail, Message from threading import Thread #

Java 基於JavaMail實現向QQ郵箱傳送郵件

需求 最近專案在做新聞爬蟲,想實現這個功能:爬蟲某個頁面失敗後,把這個頁面的 url 發到筆者的郵箱。最終實現的效果圖如下,後期可以加上過濾標籤、失敗狀態碼等,方便分類搜尋異常。 開發人員可以根據郵件裡的 url 和堆疊資訊,分析爬蟲失敗的原因。 是

java程式碼使用QQ郵箱傳送郵件

import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.

阿里雲上的使用QQ郵箱傳送郵件

直接上程式碼了 由於阿里雲禁用了25埠所以替換成465埠並修改協議為ssl才能傳送郵件 參考我的另一篇部落格 http://blog.csdn.net/u013412790/article/details/54912506 public class Se

Java使用QQ郵箱傳送郵件

本文介紹通過java,使用QQ郵箱進行傳送郵件。 首先要開啟郵箱的SMTP服務,騰訊會給一個授權碼。 package util; import java.util.Properties; import javax.mail.Authenticator; import

Spring Boot學習(十四)之Spring boot中使用QQ郵箱傳送郵件

相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。下面通過例項看看如

django實現如何向QQ郵箱傳送郵件

首先在settings中進行設定以下操作: 首先是:EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend',確保你使用的是smtp 接著設定一下操作: EMAIL_HOST = 'smtp.qq.c

javamail實現用普通QQ郵箱傳送郵件

本人最近在寫一個Android專案,使用者註冊的時候想用郵箱驗證的方式,於是就需要在伺服器端傳送電子郵件給新註冊使用者,郵件內容中包含一個 連結, 當用戶點選這個連結將 登入到伺服器 的驗證邏輯。本人在網上找了很多程式碼,可能由於是很久以前的了,各大郵箱的規範

Python 通過連線qq郵箱伺服器傳送郵件

python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議進行了簡單的封裝。 傳送郵件主要用到了smtplib 和 email 程式碼非常簡單,上程式碼: import smtplib from email.mime.text import MIME

Python做個QQ郵箱定時傳送天氣預報給女神,教你呵護心愛的她!

  天氣突然降溫了,還下了雪,今天溫度更是到了零下2度。由於說什麼暖心的話不是我的特長,所以我就琢磨著給女神來點實際的!例如說提醒她哪天下雨阿、哪天會突然降溫阿,這樣她也能提前做點防範。於是我就利用Python寫了個小程式,由於技術有限,希望大佬勿噴!  

Python使用QQ郵箱傳送多收件人email

實際開發過程中使用到郵箱的概率很高,那麼如何藉助python使用qq郵箱傳送郵件呢? 程式碼很簡單,短短几行程式碼就可以實現這個功能。 使用到的模組有smtplib和email這個兩個模組,關於這兩個模組的方法就不多說了。 程式碼如下: #codin

django使用QQ企業郵箱傳送郵件

一、首先申請QQ企業郵箱 二、配置自己的域名 在域名解析中新增域名解析 新增MX型別的記錄: 騰訊企業郵箱要求設定的MX記錄如下: 郵件伺服器名:mxbiz1.qq.com 優先順序:5 郵件伺服器名:mxbiz2.qq.com 優先順序:10 三、在setting.p

阿里雲Centos7中GitLab使用smtp 163郵箱傳送郵件的注意事宜

1.修改gitlab.rb配置項目錄:/etc/gitlab/gitlab.rb修改:gitlab_rails['smtp_enable'] = truegitlab_rails['smtp_address'] = "smtp.163.com"gitlab_rails['sm