Python 使用smtplib、zmail或yagmail发送邮件

Python中,可以使用通过代码方式发送邮件,本文主要介绍使用smtplib、zmail和yagmail三种方法发送邮件,以及相关的示例代码。

1、使用smtplib发送邮件

1)安装smtplib

pip install PyEmail

2)使用代码

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
 
sender = 'cjavapy@qq.com'
receivers = ['cjavapy@163.com']  # 收件人,多人的话便可把邮箱添加到收件人列表中
 
mail_host = 'smtp.qq.com'        # 设置邮箱服务器
mail_user = 'cjavapy'          # 登录的qq邮箱名
mail_pass = '**********'   # 使用的qq邮箱发送邮件,为qq邮箱的授权码,非密码,可在网页的邮箱设置中开通,其它邮箱也类似
 
# 创建一个带附件的实例
message = MIMEMultipart()
 
message['From'] = Header("显示的发件人名称", 'utf-8')  
message['To'] = Header("显示的收件人的名称", 'utf-8')
subject = '这是邮件主题'
message['Subject'] = Header(subject, 'utf-8')
 
# 邮件正文内容
message.attach(MIMEText('邮件正文内容:学习Python编程!!!', 'plain', 'utf-8'))
 
# 如有附件,参考下面方法,添加附件
att1 = MIMEText(open('outfile/cjavapy.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 此处filename可以随意填写,填写的内容就是邮件中的显示
att1["Content-Disposition"] = 'attachment; filename="cjavapy.txt"; encoding="utf-8"'
message.attach(att1)
 
# 如果还有其他附件,可以继续按照附件1的添加方式继续添加
 
try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 587)    # 587 为 SMTP 端口号
    smtpObj.login(mail_user, mail_pass)
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print(e)
    print("Error: 无法发送邮件")

2、使用zmail发送邮件

1)安装zmail

pip install zmail

2)使用代码

import zmail
mail = {
    'subject': '这是邮件主题',  # 发送的邮件的标题
    'content_text': '邮件正文内容:学习Python编程!!!', #你想要发送的邮件的内容
    'from':'Boss <mymail@foo.com>',  # 发送人的名称(可选参数)
    'attachments': ['/Users/zyh/Documents/example.zip','/root/1.jpg'],  # 发送的附件(可选参数)
}

mail_pass = '**********'   # 使用的qq邮箱发送邮件,为qq邮箱的授权码,非密码,可在网页的邮箱设置中开通,其它邮箱也类似
server = zmail.server('发送邮箱地址yourmail@example.com', mail_pass)

#发送单个邮件
server.send_mail('yourfriend@example.com', mail) 

#群发邮件
server.send_mail(['yourfriend@example.com','12345@example.com'], mail)

#群发邮件并为某个邮件单独设置发送人名称
server.send_mail([('发送人名称','yourfriend@example.com'),'12345@example.com'], mail) 

#抄送邮件
server.send_mail(['单独发送的邮箱foo@163.com','单独发送的邮箱2 foo@126.com'],mail,cc=[('发件人名字','抄送邮箱bar@163.com'),'抄送邮箱2'])

3、使用yagmail发送邮件

1)安装yagmail

pip install yagmail

2)使用代码

import yagmail
 
username = 'cjavapy@qq.com'
passwd = '**********'   # 使用的qq邮箱发送邮件,为qq邮箱的授权码,非密码,可在网页的邮箱设置中开通,其它邮箱也类似

mail = yagmail.SMTP(user=username,
                    password=passwd,
                    host='smtp.qq.com',#其他服务器就smtp.qq.com  smtp.126.com
                    smtp_ssl=True
                    ) #如果用的是qq邮箱或者你们公司的邮箱使用是安全协议的话,必须写上 smtp_ssl=True
mail.send(
    to=['to@qq.com',], #如果多个收件人的话,写成list就行了,如果只是一个账号,就直接写字符串就行to='username@qq.com'
    cc='cc@qq.com',#抄送
    subject='这是邮件主题',#邮件标题
    contents='邮件正文内容:学习Python编程!!!',
attachments=['D:\a.txt','D:\b.txt']) #邮件正文,附件如果只有一个的话,用字符串就行

推荐阅读
cjavapy编程之路首页