今天来教大家如何使用代码来发邮件,可以直接封装成方法,方便快捷,就以163邮箱和qq邮箱为实例
一、申请邮箱POP3/SMTP协议的授权码
这里说一下为什么要申请这个东西?
授权码多用于第三方登录,我们使用代码发邮件时,设置的密码不是登录密码,而是这个授权码
一定要记好这个授权码,尽量保存到自己的邮箱或记事本中
(1)qq邮箱
进入邮箱 >>> 设置 >>> 账户 >>> 找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
(2)163邮箱,步骤如下
然后根据提示开启
二、导入模块
import smtplib
import email
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
smtplib:全称为 simple mail transfer protocol libraty ,意思为简单邮件传输协议图书馆
MIME:用于邮件扩充协议
三、具体代码实现
因为我们要封装起来,所以先建一个类,定义两个类属性
email:使用内嵌形式
email_client:获取SMTP的证书
class Send_email(object):
email = MIMEMultipart('related')
email_client = smtplib.SMTP_SSL()
(1)登录邮箱
参数一:你的邮箱名
参数二:你的授权码
@classmethod
def email_type(cls,email_from,password):
host = 'smtp.' + email_from.split('@')[1]
cls.email['From'] = email_from
cls.email_client.connect(host,'465')
cls.email_client.login(email_from,password)
(2)写入内容,纯文本形式
参数:邮件内容
@classmethod
def write_email_text(cls,text):
email = MIMEText(text,'plain','utf-8')
cls.email.attach(email)
(3)写入附件
参数一:要发送的附件名(带后缀)
参数二:重新命名的附件名(带后缀)
@classmethod
def write_eamil_accessory(cls,file_name,new_name):
email_accessory = MIMEText(open(file_name,'rb').read(),'base64','utf-8')
email_accessory.add_header("Content-Disposition","attachment",filename=("utf-8","",new_name))
cls.email.attach(email_accessory)
(4)发送邮件(可群发)
参数一:邮件标题
参数二:接收者(群发用逗号隔开)
@classmethod
def send_email(cls,subject,receiver):
cls.email['Subject'] = subject
if ',' in receiver:
cls.email_client.sendmail(from_addr=cls.email['From'],to_addrs=receiver.split(','),msg=cls.email.as_string())
else:
cls.email_client.sendmail(from_addr=cls.email['From'],to_addrs=receiver,msg=cls.email.as_string())
cls.email_client.close()
之后只需要按顺序调用方法就行了,是不是很简单,快去试试吧