V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2020-12-15 10:27:09 +08:00 · 5213 次点击
    这是一个创建于 1199 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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