如何用几行Python代码实现邮件发送

本篇教你如何用几行简单的Python实现邮件发送,可以作为一种验证码邮件发给用户。

1. 163邮箱SMTP服务开启

本篇文章使用163邮箱发送,在实现邮件发送前,需要在163邮箱里进行配置。进入邮箱,点击‘设置’,选择'POP3/SMTP/IMAP'。 

然后,我们需要开启SMTP服务,其服务器地址为: smtp@163.com 这个地址之后需要在代码里填写。另外,我们会获得一个授权码,也需要记下来,之后代码里需要使用。

 

2. Python实现邮件发送

163邮箱使用的是SMTP服务器,我们先对SMTP进行简单介绍。SMTP(Simple Mail Transfer Protocol)是简单传输协议,它是一组用于用于由源地址到目的地址的邮件传输规则。Python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

我们主要会用到两个模块: ①email模块:负责构建邮件。 ②smtplib模块:负责发送邮件。

下面是一个发送纯文本邮件的小例子:

from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib

def format_addr(s):
    name, addr = parseaddr(s)  
    return formataddr((Header(name, 'utf-8').encode(), addr))


def send_email(mess, to_addr):
    # SMTP服务器以及相关配置信息
    smtp_server = 'smtp.163.com'  # 163邮箱用到的SMTP服务器
    from_addr = 'xxx@163.com'
    password = '***' 
    try:
        msg = MIMEText(mess, 'plain', 'utf-8')
        # 1.创建邮件(写好邮件内容、发送人、收件人和标题等)
        msg['From'] = format_addr('Martin <%s>' % from_addr)  # 发件人昵称和邮箱
        msg['To'] = format_addr('管理员 <%s>' % to_addr)  # 收件人昵称和邮箱
        msg['Subject'] = Header('来自Martin的问候……', 'utf-8').encode()  # 邮件标题

        # 2.登录账号
        server = smtplib.SMTP(smtp_server, 25)
        server.login(from_addr, password)

        # 3.发送邮件
        server.sendmail(from_addr, [to_addr], msg.as_string())
        server.quit()
        print('发送邮件成功')
    except Exception:
        print('发送邮件失败')

这里需要注意的是:对于163邮箱,密码不是邮箱的登录密码,而是手动开启SMTP协议后设置或分配的授权码。但是,如果是Gmail则使用的密码是登录密码。并且,Gmail 需要使用SSL协议加密传输,smtplib.SMTP_SSL('smtp.googlemail.com',465) 。 另外,163邮箱SMTP默认开启的是25号端口。

‘to_addr' 可以传入一个list,实现一次发给多个人。

 

除了发送纯文本的邮件外,其实也可以发送HTML格式邮件,可以考虑把验证信息做成点击一个超链接。

对上述例子中的msg做修改:

msg = MIMEText('<html><body><h1>Hello</h1>' +
  '<p>send by <a href="http://www.python.org">Python</a>...</p>' +
  '</body></html>', 'html', 'utf-8')

 

邮件里还可以增加附件,需要引入MIMEApplication。具体实例如下所示:

from email.mime.multipart import MIMEMultipart 
from email.mime.application import MIMEApplication 

   
#---这是附件部分--- 
#xlsx类型附件 
part = MIMEApplication(open('foo.xlsx','rb').read()) 
part.add_header('Content-Disposition', 'attachment', filename="foo.xlsx") 
msg.attach(part) 
   
#jpg类型附件 
part = MIMEApplication(open('foo.jpg','rb').read()) 
part.add_header('Content-Disposition', 'attachment', filename="foo.jpg") 
msg.attach(part) 
   
#pdf类型附件 
part = MIMEApplication(open('foo.pdf','rb').read()) 
part.add_header('Content-Disposition', 'attachment', filename="foo.pdf") 
msg.attach(part) 
   
#mp3类型附件 
part = MIMEApplication(open('foo.mp3','rb').read()) 
part.add_header('Content-Disposition', 'attachment', filename="foo.mp3") 
msg.attach(part) 

 

参考资料:

1. https://www.cnblogs.com/insane-Mr-Li/p/9121619.html

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值