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>'

 

执行脚本,效果同上!

相关文章
相关标签/搜索