Python 發送郵件

1、介紹

SMTP是發送郵件的協議,Python內置對SMTP的支持,能夠發送純文本郵件、HTML郵件以及帶附件的郵件。html

Python對SMTP支持有smtplib和email兩個模塊,email負責構造郵件,smtplib負責發送郵件。python

 

2、需求分析

有一個shell腳本,須要有發送郵件的功能。若是直接使用shell自帶的mail發送linux

echo 郵件正文」 | mail -s 郵件主題 收件地址

 

這種郵件收到後,會被郵箱服務器攔截到。可能會進入到垃圾收件箱中,可能連垃圾箱都沒有(被攔截了)。shell

可是又不想搭建郵箱服務器,太麻煩了!bash

怎麼辦呢?使用Python就能夠解決。服務器

 

3、Python發送郵件

咱們須要使用shell腳原本調用Python腳本,因此傳參數時,須要使用命令行方式傳參。測試

sys.argv

sys.argv[]是用來獲取命令行輸入的參數的(參數和參數之間空格區分),sys.argv[0]表示代碼自己文件路徑,因此從參數1開始,表示獲取的參數了!ui

 

在python3.5.2版本中,默認已經有smtplib和email兩個模塊,因此不須要安裝了!編碼

 

正式腳本

註釋都寫好了,mail-send.py完整代碼以下:加密

#!/usr/bin/env python3
# coding:utf-8

import sys
import smtplib  # 加載smtplib模塊
from email.mime.text import MIMEText
from email.utils import formataddr

class SendMail(object):
    def __init__(self,sender,title,content):
        self.sender = sender  #發送地址
        self.title = title  # 標題
        self.content = content  # 發送內容
        self.sys_sender = '123456@163.com'  # 系統帳戶
        self.sys_pwd = '123456'  # 系統帳戶密碼

    def send(self):
        try:
            """
            構造一個郵件對象,
            第一個參數就是郵件正文,
            第二個參數是MIME的subtype,傳入'html',最終的MIME就是'text/html'。
            最後必定要用utf-8編碼保證多語言兼容性。
            """
            msg = MIMEText(self.content, 'html', 'utf-8')
            # 發件人格式
            msg['From'] = formataddr(["IT事業部系統", self.sys_sender])
            # 收件人格式
            msg['To'] = formataddr(["", self.sender])
            # 郵件主題
            msg['Subject'] = self.title
            # SMTP服務器
            server = smtplib.SMTP("smtp.163.com", 25)
            # 登陸帳戶
            server.login(self.sys_sender, self.sys_pwd)
            # 發送郵件
            server.sendmail(self.sys_sender, [self.sender, ], msg.as_string())
            # 退出帳戶
            server.quit()
            return True
        except Exception as e:
            print(e)
            return False

if __name__ == '__main__':
    # 參數個數,因爲sys.argv[0]就是腳本名,因此要減1
    num = len(sys.argv) - 1
    if num < 3 or num > 3:
        exit("參數錯誤,必須傳3個參數!當前參數個數爲%s"%num)
    
    sender = sys.argv[1]  # 發送地址
    title = sys.argv[2]  # 標題
    content = sys.argv[3]  # 發送內容

    # 調用send方法,發送郵件
    ret = SendMail(sender,title,content).send()
    if ret:
        print('發送成功!')
    else:
        print('發送失敗!')

 

注意:須要修改系統帳戶的郵箱和密碼!

若是是163郵箱,SMTP服務器無需修改,不然須要修改!

若是是qq郵箱,改動以下:
1.qq郵箱密碼換成它提供的16位受權碼
2.端口號改成465
3.smtplib.SMTP改成smtplib.SMTP_SSL

 

可能有些人會有疑惑,爲何要改爲smtplib.SMTP_SSL。由於騰訊的郵箱服務器,使用的是SSL加密方式。

 

運行腳本

將腳本上傳到 linux服務器,先用命令行運行。

語法以下:

python3 mail-send.py 發送地址 標題 發送內容

 

測試執行:

python3 mail-send.py 88888888@qq.com 申請單 '帳戶: xiao <br>密碼:123456 <br>請妥善保管好帳戶信息,本 郵件由系統發送,請勿回覆!謝謝配合!<br>'

 

這個時候,收到的郵件以下:

 

使用shell調用

使用shell腳本調用,也是一樣的道理。將命令直接寫進入就能夠了!

腳本以下:

#!/bin/bash

python3 mail-send.py 987334176@qq.com 申請單 '帳戶: xiao <br>密碼:123456 <br>請妥善保管好帳戶信息,本 郵件由系統發送,請勿回覆!謝謝配合!<br>'

 

執行腳本,效果同上!

相關文章
相關標籤/搜索