(原創)python發送郵件

来源:http://www.cnblogs.com/qiyeboy/archive/2016/03/19/5295275.html
-Advertisement-
Play Games

這段時間一直在學習flask框架,看到flask擴展中有一個mail插件,所以今天就給大家演示如果發郵件。 首先我註冊了一個163郵箱,需要開啟smtp功能,因為咱們python發送郵件經過的是smtp.163.com(網易的電子郵件伺服器)。 註冊好163郵箱,然後開啟smtp功能,如下圖所示:


這段時間一直在學習flask框架,看到flask擴展中有一個mail插件,所以今天就給大家演示如果發郵件。

      首先我註冊了一個163郵箱,需要開啟smtp功能,因為咱們python發送郵件經過的是smtp.163.com(網易的電子郵件伺服器)。

註冊好163郵箱,然後開啟smtp功能,如下圖所示:

 

開啟的過程中需要綁定手機。   

    我最終實現的樣子是這樣的:

使用flask搭建了一個web伺服器,然後做了一個網頁,將收件人,主題,正文填好之後,點擊發送,上面會顯示發送結果。

 

下麵是整個工程的結構:

templates是存放了兩個html文件,pyMail實現所有的功能。接下來我列一下源代碼,然後將發送部分的核心代碼進行講解。

 

base.html:
{% extends "bootstrap/base.html" %}

{% block title %}Flasky {% endblock %}

{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">七夜</a>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="http://blog.csdn.net/qiye_/">CSDN博客</a></li>
                <li><a href="http://www.cnblogs.com/qiyeboy/">博客園</a></li>
                <li><a href="/">公眾號:qiye_python</a></li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}

<div class="container">
{% for message in get_flashed_messages() %}
<div class="alert alert-warning">
<button type="button" class="close" data-dismiss="alert">×</button>
{{ message }}
</div>
{% endfor %}

{% block page_content %}{% endblock %}
</div>

{% endblock %}

  

index.html:

{% extends "base.html" %} {% import "bootstrap/wtf.html" as wtf %} {% block title %}首頁 {% endblock %} {% block page_content %} <div class="page-header"> {% if name %} <h1> Hello,{{ name }}! </h1> {% else %} <h1>Hello,Stranger!</h1> {% endif %} </div> {{ wtf.quick_form(form) }} {% endblock %}
pyMail.py:


#coding:utf-8
from flask import Flask,render_template,session,url_for,redirect,flash
from flask.ext.mail import Mail, Message
from flask.ext.moment import Moment
from flask.ext.wtf import Form
from flask.ext.bootstrap import Bootstrap
from wtforms import StringField,SubmitField, TextAreaField
from wtforms.validators import Required, Email

import sys
reload(sys)
sys.setdefaultencoding('utf8')#設置系統預設編碼為utf-8

'''
這個類描述了網頁上的結構
'''
class MailForm(Form):
    receiver = StringField('收件人:',validators=[Required(),Email()])
    style = StringField('主題:',validators=[Required()])
    body = TextAreaField('正文:',validators=[Required()])
    submit = SubmitField('發送')

app = Flask(__name__)
app.config['SECRET_KEY'] = 'qiyeboy'
#下麵是SMTP伺服器配置
app.config['MAIL_SERVER'] = 'smtp.163.com' #電子郵件伺服器的主機名或IP地址
app.config['MAIL_PORT'] = '25' #電子郵件伺服器的埠
app.config['MAIL_USE_TLS'] = True #啟用傳輸層安全
app.config['MAIL_USERNAME'] ='[email protected]' #os.environ.get('MAIL_USERNAME') #郵件賬戶用戶名
app.config['MAIL_PASSWORD'] = 'your password'#os.environ.get('MAIL_PASSWORD') #郵件賬戶的密碼

mail = Mail(app)
bootstrap = Bootstrap(app)#進行網頁渲染
moment = Moment(app)#時間

@app.route('/',methods=['GET','POST'])
def index():
    '''
       flask中的路由
    :return:
    '''
    mailForm = MailForm()#表單
    if mailForm.validate_on_submit():#表單提交成功的判斷
        try:
            receiverName = mailForm.receiver.data #收件人文本框的內容
            styledata = mailForm.style.data#主題文本框的內容
            bodydata  = mailForm.body.data#正文文本框的內容
            msg = Message(styledata,sender='[email protected]',recipients=[receiverName])#發件人,收件人
            msg.body = bodydata
            mail.send(msg)
            flash('郵件發送成功!')#提示信息
        except:
            flash('郵件發送失敗!')

    return render_template('index.html',form=mailForm,name ='[email protected]' )#渲染網頁

if __name__ == '__main__':
    app.run(debug=True)

  

  我將代碼中我的郵箱和密碼都隱藏了,如果大家要試驗的話,請換成自己的郵箱和密碼,記住這個密碼不是登錄密碼,而是開啟smtp時輸入的管理密碼。
mail核心代碼:
1.首先配置smtp伺服器:
#下麵是SMTP伺服器配置

app.config['MAIL_SERVER'] = 'smtp.163.com' #電子郵件伺服器的主機名或IP地址
app.config['MAIL_PORT'] = '25' #電子郵件伺服器的埠
app.config['MAIL_USE_TLS'] = True #啟用傳輸層安全
app.config['MAIL_USERNAME'] ='[email protected]' #os.environ.get('MAIL_USERNAME') #郵件賬戶用戶名
app.config['MAIL_PASSWORD'] = 'xxxxxx'#os.environ.get('MAIL_PASSWORD') #郵件賬戶的密碼

2.發送郵件:

msg = Message(styledata,sender='[email protected]',recipients=[receiverName])#發件人,收件人
msg.body = bodydata
mail.send(msg)

填好發件人,收件人,主題,正文,然後發送就OK了。

最後給大家看一下發送的演示圖:

這時候我的qq郵箱已經收到了郵件:

今天的分享就到這裡,七夜音樂台的開發正在進行中,敬請期待,記得打賞呦。

 

歡迎大家支持我的公眾號:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring官網改版後,很多項目的完整zip包下載鏈接已經隱掉了,雖然Spring旨在引導大家用更“高大上”的maven方式來管理所依賴的jar包,但是完全沒想到中國的國情,在偉大的牆內,直接通過maven下載牆外的東西,要麼龜速,要麼直接被和諧。 下麵是從網上搜集的一些方法,可用於一次性下載Spr
  • 以下內容基於jdk1.7.0_79源碼; Map介面的實現,其key-value映射中的key是Enum類型; 其原理就是一個對象數組,數組的下標索引就是根據Map中的key直接獲取,即枚舉中的ordinal值; 效率比HashMap高,可以直接獲取數組下標索引並訪問到元素; 比較簡單,源代碼就不一
  • 本文參考鏈接: http://baike.baidu.com/link?url=OJ6MAAQPdKpJlZm414wmuGDcaSwfeQWd63DaTRCWhSVerqkzmkbnC014BRVFHGVZwZUb5E_BOXJZgf_4DVD8S_
  • php 5個版本,5.2、5.3、5.4、5.5,怕跟不上時代,新的伺服器直接上5.5,但是程式出現如下錯誤:Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the futur
  • 本文參考鏈接: http://baike.baidu.com/link?url=svs6WnjQKV7Ugx3SZke6BvyVy99OOE8I-zn8gSw0HFb-YD-IIcdf2F2h5WGslM4Q4Dog28oXyjX51lnvF2n0Kq
  • 利用SocketServer模塊來實現網路客戶端與伺服器併發連接非阻塞通信。首先,先瞭解下SocketServer模塊中可供使用的類:BaseServer:包含伺服器的核心功能與混合(mix-in)類掛鉤;這個類只用於派生,所以不會生成這個類的實例;可以考慮使用TCPServer和UDPServer
  • Warning messages: 1: In odbcDriverConnect("DSN=Rdata;UID=root") : [RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC 驅動程式管理器] 未發現數據源名稱並且未指定默
  • 在任何模式的編程過程中都無法避免副作用的產生。我們可以用F[A]這種類型模擬FP的運算指令:A是可能產生副作用的運算,F[_]是個代數數據類型ADT(Algebraic Data Type),可以實現函數組合(functional composition),我們可以不用理會A,先用F[_]來組合形成
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...