资讯专栏INFORMATION COLUMN

Python 发送 email 的三种方式

kun_jian / 1273人阅读

摘要:本米扑博客先介绍几个最简单的发送邮件方式记录下,像邮件,附件等也是支持的,需要时查文档即可。特别注意命令发送邮件,默认用端口号,由于阿里云腾讯云等封禁了端口号,因此本示例需在开通端口机器上测试执行命令收件结果

Python发送email的三种方式,分别为使用登录邮件服务器、使用smtp服务、调用sendmail命令来发送三种方法

本文原文自米扑博客:Python 发送 email 的三种方式

Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sendmail命令来发送,还可以使用本地或者是远程的smtp服务来发送邮件,不管是单个,群发,还是抄送都比较容易实现。本米扑博客先介绍几个最简单的发送邮件方式记录下,像html邮件,附件等也是支持的,需要时查文档即可。

一、登录邮件服务器

通过smtp登录第三方smtp邮箱发送邮件,支持 25 和 465端口

vim python_email_1.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# author: mimvp.com
# 2015.10.05
 
 
import smtplib  
from email.mime.text import MIMEText  
   
smtpHost = "smtp.exmail.qq.com" 
sender = "robot@mimvp.com" 
password = "mimvp-password" 
receiver = "yanggang@mimvp.com"
   
content = "hello mimvp.com" 
msg = MIMEText(content)  
   
msg["Subject"] = "email-subject" 
msg["From"] = sender  
msg["To"] = receiver  
   
## smtp port 25
smtpServer = smtplib.SMTP(smtpHost, 25)         # SMTP
smtpServer.login(sender, password)  
smtpServer.sendmail(sender, receiver, msg.as_string())  
smtpServer.quit()  
print "send success by port 25" 
 
## smtp ssl port 465
smtpServer = smtplib.SMTP_SSL(smtpHost, 465)    # SMTP_SSL
smtpServer.login(sender, password)  
smtpServer.sendmail(sender, receiver, msg.as_string())  
smtpServer.quit()  
print "send success by port 465"

执行命令:

$ python python_email_1.py 
send success by port 25
send success by port 465

发送结果,会收到两封邮件,截图其中一份邮件如下图:


二、使用smtp服务

测试失败,略过或留言指正

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# author: mimvp.com
# 2015.10.05
 
 
import smtplib  
from email.mime.text import MIMEText  
import subprocess
   
smtpHost = "smtp.exmail.qq.com" 
sender = "robot@mimvp.com" 
password = "mimvp-password" 
receiver = "yanggang@mimvp.com"
   
content = "hello mimvp.com" 
msg = MIMEText(content)   
   
   
 
if __name__ == "__main__":   
    p = subprocess.Popen(["/usr/sbin/sendmail", "-t"], stdout=subprocess.PIPE)  
    print(str(p.communicate()))
    p_res = str(p.communicate()[0])
    msg = MIMEText(p_res)
 
    msg["From"] = sender  
    msg["To"] = receiver  
    msg["Subject"] = "hello mimvp.com" 
    s = smtplib.SMTP(smtpHost)  
    s.login(sender, password)
    s.sendmail(sender, receiver, msg.as_string())  
    s.quit()  
    print "send success"

三、调用sendmail命令

调用本机linux自身sendmail服务发送邮件,不需要启动sendmail后台进程,不需要发送者登录,邮件发送者可以是任意名字,没有限制。

特别注意:sendmail 命令发送邮件,默认用25端口号,由于阿里云、腾讯云等封禁了25端口号,因此本示例需在开通25端口机器上测试

vim python_email_3.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# author: mimvp.com
# 2015.10.05
  
  
from email.mime.text import MIMEText
from subprocess import Popen, PIPE
import commands
  
import sys 
reload(sys)
sys.setdefaultencoding("utf-8")
  
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())
  
  
sender = "robot@mimvp.com"
recevier = "yanggang@mimvp.com"
subject = "sendmail-subject"
html_content = "hello mimvp.com"
send_mail(sender, recevier, subject, html_content)

执行命令:

python python_email_3.py

收件结果:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44825.html

相关文章

  • rabbitmq常用三种exchange类型和python库pika接入rabbitmq

    摘要:可以简单方便的通过配置,并可以向和中发消息来验证自己的理解。然后通过发送消息,可以随便填写,因为是类型的,不起作用。这种情况下,队列之间是互斥关系,一个消息最多只能进入一个队列。 现在很多开源软件都提供了对应的web管理界面,rabbitmq也不例外,rabbitmq提供了一个web插件。当rabbit-server启动之后,即在浏览器中通过http://localhost:15672...

    YancyYe 评论0 收藏0
  • zeromq三种简单模式(python实现)

    摘要:的明确目标是成为标准网络协议栈的一部分,之后进入内核。实现端测试消息已发送端正在转发端输出结果已发送已发送已发送正在转发正在转发正在转发测试消息测试消息测试消息 简介 ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间...

    lufficc 评论0 收藏0
  • HTTP协议中你必须知道三种数据格式

    摘要:分块传输编码分块传输编码是超文本传输协议中的一种数据传输机制,允许由网页服务器发送给客户端应用通常是网页浏览器的数据可以分成多个部分。分块传输编码只在协议版本中提供。 实习中的一个主要工作就是分析 HTTP 中的协议,自己也用 Python 写过正则表达式对 HTTP 请求和响应的内容进行匹配,然后把关键字段抽离出来放到一个字典中以备使用(可以稍微改造一下就是一个爬虫工具)。 HTTP...

    Blackjun 评论0 收藏0
  • PyCharm的安装、设置及使用

    摘要:的简介随着近年来的火爆程度逐年攀升越来越多的开发者开始因其丰富的库支持简洁高效的语法以及强大的运算速度而对其纷纷侧目也正因此及基于它而生的各类框架如等普遍应用于当下各类场景下作为时代的弄潮儿大有独领风骚之势也正是因此毫无疑问是当前最好的编程 PyCharm的简介 随着近年来Python的火爆程度逐年攀升,越来越多的开发者开始因其丰富的库支持,简洁高效的语法以及强大的运算速度而对其纷纷侧...

    jzzlee 评论0 收藏0
  • python之单例模式实现三种方式

    摘要:输出结果输出结果此外还有两种实现单例的方式,我呢也给大家列出来,方便大家学习和参考方式一方式二单例模式实现方式二。。。 什么是单例模式?通俗点讲:单例模式就是在程序执行的过程中,类只有一个实例,这不是说单例模式只能去创建一个实例,而是你创建的所有实例(也就是对象)都指的是同一个实例。如何做到这一点呢?我们的__new__特殊方法就派上用场了,可能大家对这个方法熟悉又陌生,那么接下来通过...

    dack 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<