python -- 发送邮件

介绍:

发邮件需要用到python两个模块,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。其中MIMEText()定义邮件正文,Header()定义邮件标题。MIMEMulipart模块构造带附件。

大致流程:

1、发件人需要登录邮箱、涉及发件人的登录账号和密码----smtplib

2、构造邮件内容:1)确定邮件内容,涉及附件的话,需要设置有邮件体对象----MIMEMulipart

                   msg_root = MIMEMultipart('mixed')

                                  2)邮件内容:发件人、收件人、主题、正文、附件

                             其中:收件人包括单人收件  和  多人收件

                                    主题需要导入:from email.header import Header

                                   编辑正文需要导入:from email.mime.text import MIMEText

3、使用smtplib发送邮件

4、各模块语法介绍:https://www.cnblogs.com/zhangxinqi/p/9113859.html

导图总结如下:

 

 

本人代码样例:

#-*- coding:utf-8 -*-

import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from utils.logger import Logger

logger = Logger(logger='SendEmail').get_log()

class SendEmail():

    def send_email(self,to,filename):
        #设置账户和密码
        sender_email = 'amy@mail.com'
        sender_pass = '####'
        logger.info('设置发件邮箱登录账号和密码')
        #设置总的邮件体对象,对象类型为mixed
        msg_root = MIMEMultipart('mixed')
        logger.info('设置总的邮件体对象,对象类型为mixed')
        #邮件添加的头尾信息等
        msg_root['From'] = 'amy@mailcom<amy@mail.com>'
        logger.info('设置发件人的邮箱信息')
        msg_root['To'] = to
        logger.info('设置收件人的邮箱信息')
        #邮件主题,显示在接收邮件的预览页面
        subject = 'python sendmail test successful'
        msg_root['subject'] = Header(subject,'utf-8')
        #构造文本内容
        text_info = 'happy everyday!!'
        text_sub = MIMEText(text_info,'plain','utf-8')
        msg_root.attach(text_sub)
        #构造附件
        html_file = open(filename,'rb').read()
        html = MIMEText(html_file,'base64','utf-8')
        #邮件内容
        html["Content-Type"] = 'application/octet-stream'
        html['Content-Disposition'] = 'attachment;filename="jetty_report.html"'
        msg_root.attach(html)

        #发送邮件
        try:
            sftp_obj = smtplib.SMTP('lsmtp.com',25)
            sftp_obj.login(sender_email,sender_pass)
            sftp_obj.sendmail(sender_email,to,msg_root.as_string())
            sftp_obj.quit()
            print('sendemail successful')
        except Exception as e:
            print('sendemail failed next is the reason')
            print(e)


if __name__ == '__main__':
    # to = 'amy23@sfmail.sf-express.com'
    to = ['amy@mail.com','80004207@mail.com','yanliqin@mail.com']
    to = ';'.join(to)
    logger.info('收件人为多个')
    file_name = r'D:\api\test_report\jetty_report.html'
    send = SendEmail()
    send.send_email(to,file_name)

参考:

https://www.cnblogs.com/du-hong/p/10812533.html

https://www.cnblogs.com/du-hong/p/10819199.html

https://www.cnblogs.com/du-hong/p/10819319.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值