使用Python发送E-Mail (SMTP协议)

在做测试项目的时候,当测试完成之后,需要把结果自动发送给相关的开发者,这个时候就需要使用SMTP协议来发送mail。

SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。通常它工作在两种情况下:一是邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。

在代码测试中,发现使用126邮箱可以成功,而使用公司的邮箱却一直失败。后来和公司资讯部门确认,才知道需要申请开通mail relay功能才能使用。本文分别简要地介绍这两种方式,并给出简单的测试代码。


一、使用126公共邮箱发送SMTP邮件

默认情况下,126允许用户通过自己账户发送SMTP邮件,如果有问题,请登录自己的126邮箱,去 “设置”下面的“POP3/SMTP/IMAP”查看功能是否开启,以及SMTP服务器地址。

下面是使用126邮箱的测试代码,用户只需要更改smtp.login("用户名", "密码"),改成自己的登录账户和密码,即可以测试;另外,修改recepients = [收件人地址],更改收件人地址,如果要发送多人,请用“,”分割。

如果大家使用其他公共的邮箱发送mail,也请确认,

1. 邮箱是否支持SMTP服务?如果支持,是否已经开启?

2. 确认邮箱SMTP服务器地址。

使用126邮箱的示例代码如下,

from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase

def sendmail():
    recepients = ["XXX@xxx.com"]
    print("starting send mail")
    msg = MIMEMultipart("alternative")
    msg['Subject'] = "This is my first mail send by Automation System"
    msg["From"] = "UserName@126.com"
    msg["To"] = ", ".join(recepients)

    html = '<html><head><H4>Hi all,<br>Please find the Automation Test result</H4>'        
    msg.attach(MIMEText(html, 'html'))

    smtp = SMTP()
    smtp.connect("smtp.126.com")
    smtp.login("UserName", "Password")
    smtp.sendmail(msg["From"], recepients, msg.as_string())

    print("Email Sent")

sendmail()

二、使用公司邮箱发送SMTP邮件

一般情况下,公司处于安全考虑,默认情况下可能会把SMTP功能禁掉,使用人需要申请才能开通使用。这个每个公司的规定不同,具体要和公司的资讯部门了解。

以笔者所在的公司而言,用户需要首先申请固定IP地址,然后申请mail relay服务,这样绑定固定IP地址的电脑才有权限发送SMTP邮件。发送邮件无需用户名和密码。

关于mail relay,可以参考维基百科的解释 https://en.wikipedia.org/wiki/Open_mail_relay

另外,鸟哥Linux私房菜也有对relay的讲解 22.1.5 Relay 與認證機制的重要性

步骤如下,

1. 申请固定IP地址;

2. 申请mail relay服务;

3. 选择电脑,将其更改为固定IP地址;

示例代码如下,

from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase

def sendmail():
    recepients = ["XXX@xx.com"]
    print("starting send mail")
    msg = MIMEMultipart("alternative")
    msg['Subject'] = "Test"
    msg["From"] = "Test@test.com"
    msg["To"] = ", ".join(recepients)

    html = '<html><head><H4>Hi all,<br>Please find the Automation Test result</H4>'        
    msg.attach(MIMEText(html, 'html'))

    smtp = SMTP()
    smtp.connect("MailServer.Company.com")
    smtp.ehlo()
    smtp.sendmail(msg["From"], recepients, msg.as_string())

    print("Email Sent")

sendmail()


更多文章 

1. 菜鸟教程 - Python SMTP发送邮件

2. The Python Standard Library - 18.1.11. email: Examples



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值