推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
taomujian
V2EX  ›  Python

用纯 Python 实现一个发送邮件的功能

  •  
  •   taomujian · Dec 15, 2020 · 6937 views
    This topic created in 2152 days ago, the information mentioned may be changed or developed.

    最近需要用 python 做一个发送邮件的功能,不用第三方邮箱的 api,怎么才能实现呢?用 python 的 smtpd 库并不会向第三方邮箱投递邮箱,只能看到发送的信息.欢迎各位指点一二.

    32 replies  •  2020-12-21 11:10:10 +08:00
    RRRoger
    RRRoger
    Dec 15, 2020❤️1
    1
    `import smtplib`
    taomujian
    taomujian
    OP
    Dec 15, 2020
    2
    @RRRoger 想要的是怎么利用 python 发送邮件到 qq 等第三方邮箱,smtplib 用这个库得配置第三方邮箱接口,不符合需求
    herojaxy
    herojaxy
    Dec 15, 2020
    4
    直接用 socket 不就行了,了解下 smtp 协议,很简单的
    taomujian
    taomujian
    OP
    Dec 15, 2020
    5
    @herojaxy 好的
    taomujian
    taomujian
    OP
    Dec 15, 2020
    6
    @renmu123 这个也是要配置接口的吧....
    renmu123
    renmu123
    Dec 15, 2020
    7
    @taomujian #6 不太明白你所说的配置接口是什么意思,需要配置发送者的 SMTP 地址和端口
    ningbo2018
    ningbo2018
    Dec 15, 2020
    8
    https://github.com/yangningbo666/operation-tools/tree/master/mail-by-local 之前写的用的就是 smtplib,在 Linux 本地发送邮件,不使用别的第三方邮箱 api
    Tink
    Tink
    Dec 15, 2020
    9
    @taomujian #6 不配发件人发给 qq 邮箱,99.99%进垃圾箱
    taomujian
    taomujian
    OP
    Dec 15, 2020
    10
    @renmu123 需求是不需要配置登陆的邮箱登陆等信息,就只有一个发件人地址,就是伪造邮箱的意思
    taomujian
    taomujian
    OP
    Dec 15, 2020
    11
    @Tink 需要伪造一个不存在的发件人地址,进垃圾箱也没事,能收到就好
    taomujian
    taomujian
    OP
    Dec 15, 2020
    12
    @ningbo2018 OK,我借鉴下
    ericgui
    ericgui
    Dec 15, 2020
    13
    你还是用第三方专业的邮件服务吧
    会否则进垃圾箱的
    TimePPT
    TimePPT
    Dec 15, 2020 via Android
    14
    进垃圾箱是小,严重的直接把你 IP ban 了
    love
    love
    Dec 15, 2020 via Android
    15
    自己搭的想发给 qq 你想多了,qq 过头的反垃圾邮件是吃素的吗
    taomujian
    taomujian
    OP
    Dec 15, 2020
    16
    进垃圾箱也无妨
    GG668v26Fd55CP5W
    GG668v26Fd55CP5W
    Dec 15, 2020 via iPhone
    17
    好像可以调用系统的邮件,Linux 默认是 sendmail,php 的 mail 函数默认就是这样的。
    GG668v26Fd55CP5W
    GG668v26Fd55CP5W
    Dec 15, 2020
    18
    楼上的都是想当然了,实际上 QQ 邮箱并不会一定会拦截伪造的发件人,只会显示由 xxx 代发,当然那个代发的地址只是跑 sendmail 进程的用户和主机名。不会进垃圾箱,更没有封 ip 一说,以下是我的 wordpress 网站注册用户提醒邮件。

    https://i.loli.net/2020/12/15/EFI4LCe6onms3Ti.png
    TimePPT
    TimePPT
    Dec 15, 2020 via Android
    19
    @falcon05 并不是想当然,你大规模发送试试,分分钟被 ban,邮件反垃圾跟 IP 行为评级,发送频率等相关。偶尔发和大批量发送两码事。
    我最高做过日发送量 200 万的 edm,QQ 邮箱收信是最难的
    GG668v26Fd55CP5W
    GG668v26Fd55CP5W
    Dec 15, 2020 via iPhone❤️1
    20
    @TimePPT 那不是单一因素了,大规模发送任何一个合格的邮件系统都有风控。目前我见过最严格的是 hotmail,连 digital ocean 的正常验证邮件都收不到。
    TimePPT
    TimePPT
    Dec 15, 2020❤️1
    21
    @falcon05 对的,ESP 运营商发垃圾策略基本上会考虑几十个因素上百种策略,如果大面积群发,至少要做好相应策略规避风险。
    比如因素有:IP 历史行为评级(历史垃圾 IP 黑名单)、MX 记录 /TXT 记录、IP 反解析、SPF 设置、DKIM 设置、发送频率、无效投递邮件占比、邮件内容敏感词、邮件内容外链评级(垃圾外链)、订阅邮件是否提供可退订选项……等等等等。
    都做好了,才有可能有比较好的投递效果。

    当然,感觉 LZ 不在乎 ╮(╯_╰)╭
    julyclyde
    julyclyde
    Dec 15, 2020
    22
    20 年前的话倒是可以这么写
    taomujian
    taomujian
    OP
    Dec 15, 2020
    23
    发送邮件是为了注册系统用的,能收到验证码就好,在不在垃圾箱不重要,不是商用,个人开发的小系统用,现在注册得配置第三方邮箱 api,太麻烦了..........
    Hilalum
    Hilalum
    Dec 15, 2020
    24
    就多四个配置,不明白有什么麻烦的
    taomujian
    taomujian
    OP
    Dec 15, 2020
    25
    @Hilalum 单纯的 4 行代码当然简单,但这种方式个人觉着不好用
    cz5424
    cz5424
    Dec 15, 2020 via iPhone
    26
    @taomujian 后面做出来发现自己写的更不好用,但以学技术为目的,没事有时间造轮子肯定是没问题的,随便折腾吧
    tonyaiken
    tonyaiken
    Dec 16, 2020 via iPhone
    27
    就是配置一下服务器地址账号密码端口有什么麻烦的,别人收不到邮件每次都来问你才麻烦。
    taomujian
    taomujian
    OP
    Dec 16, 2020
    28
    @tonyaiken 配置这个东西本身不麻烦,而是这种方式麻烦
    tonyaiken
    tonyaiken
    Dec 16, 2020 via iPhone
    29
    @taomujian 只有这种方式能保证送达率,不然随便一个服务器就可以发送巨量垃圾邮件
    huichao
    huichao
    Dec 19, 2020
    30
    个人推荐使用第三方的,我们公司有用 Mailgun 和 SendGrid
    hxy100
    hxy100
    Dec 20, 2020
    31
    不使用第三方提供的服务的话那你得自己搭建 SMTP 服务器,需要准备较权威的域名和 DNS 反向解析记录,否则是无法顺利发送的,接收方邮箱是 QQ,163 这些的话直接就拦截了。对方看不到。
    taomujian
    taomujian
    OP
    Dec 21, 2020
    32
    @hxy100 是的,我是在机器上用安装的 postfix,然后用其他的域名达到了效果
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1922 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 01:10 · PVG 09:10 · LAX 17:10 · JFK 20:10
    ♥ Do have faith in what you're doing.