• Python与邮件笔记


    来聊聊邮件

    在很多工作场合我们都需要用到邮件,他在生产环境中,具有较高的证据地位。
    而在开发的过程中,我也碰到了很多和邮件相关的东西,在这里做一个整理和记录,方便以后的不时之需。

    正则匹配邮件地址

    http://blog.jobbole.com/89275/

    这个文章里包含了非常多的验证邮件地址的正则。我这里就放我目前比较熟悉常用的Python、shell、MySQL的版本,以及符合RFC 5322标准的版本

    • python版本
    r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$)"
    
    • grep版本
    $ grep -E -o "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}" filename.txt
    
    • MySQL版本
    SELECT * FROM `users` WHERE `email` NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$';
    
    • RFC 5322
    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|<p style='text-align:center;'><span class='MathJax_Preview'>[x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|]</span></p>!(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|<p style='text-align:center;'><span class='MathJax_Preview'>[x01-x09x0bx0cx0e-x7f])+)]</span></p>)
    

    SQL server邮件通知功能

    http://blog.jobbole.com/87077/
    暂时没有需求使用过,仅作记录

    Python SMTP发送邮件

    SMTP(simple mail transfer protocol)简单邮件传输协议。用于由原地址到目的地址传送邮件的规则,由他来控制信件的中转方式

    Python中的smtplib提供了一种很方便的途径发送电子邮件,他对SMTP协议进行了简单的封装。

    先放上一段,已经成功完成发送,但是并不推荐使用的利用第三方SMTP的QQ邮箱发送代码:

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    # 第三方SMTP服务
    mail_host='smtp.qq.com'
    # 这里不用写端口号,在下文启动smtp连接的时候填写端口号
    mail_user='476355383@qq.com'
    # 这里的密码并不是自己的QQ密码,说实话这点还是挺好的,这仅仅是一个“邮箱授权码”,并且看QQmail的解释是,这个授权码并不唯一,可以支持多台终端发送
    mail_pwd='nrplngnnptflbjbe'
    
    sender='476355383@qq.com'
    receivers=['scott062793@yeah.net']
    
    mesg=MIMEText('python 邮件发送测试','plain','utf-8')
    mesg['From']=Header('scott','utf-8')
    mesg['To']=Header('lv','utf-8')
    
    subject='python SMTP 邮件测试'
    mesg['Subproject']=Header(subject,'utf-8')
    
    try:
        smtp_obj=smtplib.SMTP_SSL(mail_host,465)
        # smtp_obj.connect(mail_host,465)
        smtp_obj.login(mail_user,mail_pwd)
        smtp_obj.sendmail(sender,receivers,mesg.as_string())
        smtp_obj.quit()
        print('send success')
    except Exception as e:
        print('----------faild----------')
        print(e)
    

    但是在发送的过程中,这封邮件可能由于因为我长久不使用QQ邮箱的缘故,被退回了,需要验证码才能重新发送,所以生产环境还是推荐安装一个sendmail

    http://blog.csdn.net/qq_37023538/article/details/53640755

    Python-sendmail发送邮件

    为了避免发送邮件的时候需要登录一些不太舒适的邮件服务商,规避一些密码修改,或者是登录频率限制发送的问题,我们可以通过linux 本身的sendmail服务发送邮件。不需要登录,发送邮件名可以是任意名字,没有限制。

    安装sendmail服务

    • 安装
    yum install -y sendmail
    
    • 启动服务
    service sendmail start
    

    Python调用sendmail发送邮件

    from email.mime.text import MIMEText
     from subprocess import Popen, PIPE
     import commands
     def send_mail(sender, recevier, subject, html_content):
         msg = MIMEText(html_content, 'html', 'utf-8')
         msg["From"] = sender
         msg["To"] = recevier
         msg["Subject"] = subject
         p = Popen(["/usr/sbin/sendmail", "-t"], stdin=PIPE)
         p.communicate(msg.as_string())
     send_mail("sender@xxxx.com","receive1@xxxx.com,receive2@xxxx.com","title", “mail_text”)
    

    这时候msg['From']这个关键参数就不用携带用户名和密码了。换一种思维来说,这个from既然可以是任意的名称,我可以把他作为一个标识,携带一些信息过去给对端去识别和分类。
    例如在对端接收邮件的时候做一个“根据发件人的名称,对邮件进行分类”。

  • 相关阅读:
    ajaxpro.2.dll web.config配置
    .net中Cookie的用法
    js,cookies做悬浮购物车
    Request.UrlReferrer为空的解决
    repeater里添加序号的方法
    asp.net 母版页使用详解转
    js继承的几种实现方法
    .net用母版页和内容页实现动态Title(副标题_主标题)
    linux c数据库备份第一版
    关于sql多表去重问题
  • 原文地址:https://www.cnblogs.com/scott-lv/p/7748306.html
Copyright © 2020-2023  润新知