python发邮件教程_Python发送SMTP邮件实例教程

欢迎,来自IP地址为:113.101.200.147 的朋友

多数应用都会用电子化消息系统同用户通信,以完成用户个性化设定工作。电子邮件也会用于这类通信,常常用于重置用户密码、确认订单以及用户验证等。电子邮件使用SMTP(Simple Mail Transfer Protocol)协议来工作,SMTP协议主要完成在不同邮件服务器间邮件收发以及邮件转发任务。

引言

Python提供了一个专门用于发送邮件的模块smtplib,这个模块定义了一个SMTP会话对象,专门用于发送SMTP邮件。要使用这个模块也很容易,直接在代码中使用以下语句进行引入:

import smtplib

现在我们进入代码部分。

首先打开IDE,创建一个python文件,文件名任意设定,方便起见,这里将该文件命名为”smtp_mail.py”。IDE的选择根据个人使用习惯,易用性来讲PyCharm比较不错,我个人使用的是Intelli J,然后再安装Python语言插件,使用效果同PyCharm类似。新建文件如下图所示:

smtp-mail-in-IDE.jpg

发送SMTP邮件的前提:

SMTP邮件服务器的域名及端口

SMTP认证的用户名及密码

邮件人的邮件地址

我们恰好有SMTP了服务器,并且是自己搭建的,域名为”daehub.com”,端口使用25端口。有兴趣自行搭建邮件服务器的朋友可以参照邮件服务器搭建教程。

现在,我们就使用这台服务器作为Python程序发送邮件的服务器,示例代码如下:

import smtplib

email_sender = 'webmaster@daehub.com'

email_receiver = 'daehub@126.com'

connection = smtplib.SMTP('mail.daehub.com', 25)

//connection.starttls()

connection.login(email_sender, 'your password')

connection.sendmail(email_sender, email_receiver, 'Hi! this email is from python...')

connection.quit()

smtplib模块专门用于发送邮件,根据SMTP邮件服务器的特性在使用时略有区别。如果SMTP服务器采用加密方式,则在”login”前需要启用加密,即调用”starttls()”方法,如果服务器未加密,则直接调用”login()”方法登录服务器。作为示例,登录密码使用了错误密码,执行代码会收到如下报错信息:

python-send-smtp-mail-auth-error.jpg

修改为正确密码后,就可以发送邮件了。

daehub-inbox-snapshot.jpg

可以看到,收到的邮件内容同代码中发送的容相同。同时,我们也发现了一个问题,就是邮件没有主题,也就是邮件并没有标题,这样的邮件发给用户显然是不合适的。而单纯使用smtplib发送邮件已经不能满足我们的要求了。于是就引入了Python语言的另一个邮件相关模块email。email负责构造邮件,smtplib负责发送邮件,两个模块配合使用就可以满足大部分需求。

使用email模块构建邮件的示例代码如下:

import smtplib

import smtp_daehub

from email.header import Header

from email.mime.text import MIMEText

from email.utils import parseaddr, formataddr

def _format_addr(s):

name, addr = parseaddr(s)

return formataddr(( \

Header(name, 'utf-8').encode(), \

addr.encode('utf-8') if isinstance(addr, bytes) else addr))

email_sender = 'webmaster@daehub.com'

email_receiver = 'daehub@126.com'

msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

msg['From'] = _format_addr(u'Python爱好者 <%s>' % email_sender)

msg['To'] = _format_addr(u'管理员 <%s>' % email_receiver)

msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()

connection = smtplib.SMTP('mail.daehub.com', 25)

connection.login(email_sender, smtp_daehub.PASSWORD)

connection.sendmail(email_sender, email_receiver, msg.as_string())

connection.quit()

我们编写了一个函数_format_addr()来格式化一个邮件地址。注意不能简单地传入name ,因为如果包含中文,需要通过Header对象进行编码。

再发送一遍邮件,就可以在收件人邮箱中看到正确的标题、发件人和收件人:

daehub-inbox-snapshot-with-subject.jpg

如果我们查看Email的原始内容,可以看到如下经过编码的邮件头:

daehub-mail-header-info.jpg

这就是经过Header对象编码的文本,包含utf-8编码信息和Base64编码的文本。如果我们自己来手动构造这样的编码文本,显然比较复杂。

以上就是使用smtplib和email模块发送邮件的基本实例,至于发送HMTL邮件以及发送附件,都是email模块的不同使用方式,这里就不再详细讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值