zoukankan      html  css  js  c++  java
  • 基于SMTPLIB的邮件服务

    先展示smtp的最小系统代码,然后再解释一下代码

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    sender = '发件人邮箱地址'
    smtpserver = '邮箱smtp服务器地址'  # 例如smtp.gmail.com
    username = sender
    password = '密码'
    port = 587
    
    receiver = '收件人邮箱地址'
    subject = '标题'
    msg = MIMEText( "正文", 'plain', 'utf-8' )
    msg['Subject'] = Header( subject, 'utf-8' )
    msg['From'] = sender
    msg['To'] = receiver
    
    smtp = smtplib.SMTP( smtpserver, port=port )
    smtp.ehlo()
    smtp.starttls()
    smtp.login( username, password )
    smtp.sendmail( sender, receiver, msg.as_string() )
    smtp.quit()
    print("发送成功")

    文中表红色的部分需要根据实际情况自行填写,smtp服务器地址和端口号一般可以在邮箱设置里面查看到,此外,需要在邮箱设置里面打开smtp服务,否则将无法使用

    如果是谷歌邮箱,即gmail,则使用的是 tls,需要添加 橙色斜体的一行,否则会报错说无法验证,然后在发送邮件前,需要点击以下两个链接并同意

    https://myaccount.google.com/lesssecureapps
    https://accounts.google.com/b/0/DisplayUnlockCaptcha

    在第一次运行程序之后,gmail会拦截你,并发一封邮件给你,表明需要确实是本人行为,点击确认后会显示之后会减少拦截,然后再次发送,一般都可以成功,若不成功,可以再打开上述两个链接查看是否同意

    国外的邮箱还有微软的outlook,但是官网速度之慢,以及经常莫名其妙的拦截,笔者非常反感,所以在尝试后不再推荐,国内笔者使用的是阿里云邮箱,因此也尝试了一下,但是阿里云邮箱会主动拦截你发出的邮件,认为你是垃圾邮件,而不是交由对方邮箱判断,因此直接不考虑

    之后尝试了网易163邮箱,目前版本需要在设置里开启smtp服务并发短信开启单独的应用密码,如果直接使用邮箱密码是无法通过验证的,在修改了smtp服务器地址和端口后(服务器上基本是不可能使用25普通端口的,本地测试可以,服务器不用考虑直接上ssl端口,有两个ssl端口的需要都试一下),需要替换一行内容为

    smtp = smtplib.SMTP_SSL( smtpserver, port=port )

    网易邮箱需要使用 ssl 非 tls ,虽然这两个本质上差不多,但是奈何对不上就是不给通过啊(摊手),同时不需要添加橙色斜体部分

    至此,理论上国内国外都有smtp邮箱服务可以使用了,如果是其他邮箱,一般都可以尝试上面 tls / ssl 两种方案和邮箱的两个 ssl 端口组合,如果程序运行后卡住,基本可以认为是无法通过验证,因为发送邮件会出现大段的 log ,当然也可以搜索一下对应邮箱的smtp demo,不过很多都是不可行的(

    下面附上笔者的实际代码格式

    config.py

    import Privacy
    
    class DevelopmentConfig(Config):
        sender = Privacy.EmailSenderWindows
        password = Privacy.EmailPasswordWindows
        smtpserver = Privacy.smtpServerWindows
        port = Privacy.smtpPortWindows
    
    
    class ProductionConfig(Config):
        sender = Privacy.EmailSenderCentOS
        password = Privacy.EmailPasswordCentOS
        smtpserver = Privacy.smtpServerCentOS
        port = Privacy.smtpPortCentOS
    
    
    config = {
        'development': DevelopmentConfig,
        'production': ProductionConfig,
        'default': DevelopmentConfig
    }

    ModuleEmail.py

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    
    class EmailManager(object):
        def __init__(self, parm):
            self.sender = parm.sender
            self.smtpserver = parm.smtpserver
            self.port = parm.port
            self.password = parm.password
        
        def SendEmail(self, receiver, subject, context):
            try:
                msg = MIMEText(context, 'plain', 'utf-8')
                msg['Subject'] = Header(subject, 'utf-8')
                msg['From'] = self.sender
                msg['To'] = receiver
                
                smtp = smtplib.SMTP(self.smtpserver, port=self.port)
                smtp.set_debuglevel(1)
                smtp.ehlo()
                smtp.starttls()
                smtp.login(self.sender, self.password)
                smtp.sendmail(self.sender, receiver, msg.as_string())
                smtp.quit()
                print("发送成功")
    
                return True
            except Exception as err:
                print("发送失败")
                print(err)
                return False

    main.py

    import platform
    
    if platform.system() == "Windows":
        myEmail = ModuleEmail.EmailManager(config["development"])
    else:
        myEmail = ModuleEmail.EmailManager(config["production"])
    
    myEmail.SendEmail(EmailAddress, EmailSubject, EmailContext)
  • 相关阅读:
    贝云cms内容管理系统(thinkphp5.0开源cms管理系统)
    NGINX.conf配置文件支持pathinfo
    阿里云视频直播PHPSDK接入教程
    如何在Nginx下配置PHP程序环境
    tomcat 内存参数优化示例
    12组免费的CSS3按钮强力推荐 狼人:
    9款jQuery插件为你的网站增加亮点 狼人:
    TUP第11期:腾讯、豆瓣精英实例诠释互联网研发之道 狼人:
    【TUP第11期】腾讯黄朝兴:浅谈客户端架构 狼人:
    Linus Torvalds:回顾Linux20年 狼人:
  • 原文地址:https://www.cnblogs.com/Pyrokine/p/13611490.html
Copyright © 2011-2022 走看看