python实现SMTP编程

时间:2020-12-28 18:13:09

通过SMTP发送E-mail,通常需要提供如下信息:
①SMTP服务器,例如smtp.qq.com
②发件人E-mail账号
③收件人E-mail账号
④发件人用户名
⑤发件人E-mail密码
使用python发送E-mail需要首先导入smtplib模块
import smtplib

1.连接到SMTP服务器
s=smtplib.SMTP(server) server是要连接的服务器,以后可以实现交互

2.执行EHLO命令
在发送E-mail时,客户应该以EHLO命令开始SMTP会话。如果命令成功,服务器返回代码250(通常在200~299正确)
执行方法:s.ehlo()
ehlo()返回一个元组,第一个元素是服务器返回的代码
如果服务器没有正常回应EHLO命令,可以报出SMTPHelloEror异常
raise SMTPHelloError(code,resp) code是返回代码,resp是响应信息

3.判断SMTP服务器是否支持指定属性
SMTP服务器对象.has_extn(属性名)
①size允许发送邮件的大小
②starttls获得服务器是否支持TLS
③auth获得服务器是否支持认证

4.发送邮件
SMTP服务器对象.sendmail(发件人地址,收件人地址,邮件内容)

实例(通过命令行参数指定SMTP服务器等参数):

# -*- coding: cp936 -*-
import socket
import sys
import smtplib
import getpass
if len(sys.argv)>4:
print '[*]usage:%s server fromaddr toaddr'%(sys.argv[0])
sys.exit(1)


server=sys.argv[1] #第一个参数是服务器
fromaddr=sys.argv[2] #第二个参数是发件人地址
toaddr=sys.argv[3]#第三个参数是收件人地址
#邮件内容
message="""
TO: %s
From:%s
Subject:Test Message from:mail.py

Hello,this is a simple SMTP_mail example
gogo!warriors! gogo!Stephen Curry!
"""
%(toaddr,fromaddr)

def auth_login():
print u'input your username:'
username=input()
password=getpass.getpass('input password:')
try:
s = smtplib.SMTP_SSL(server, 465) #连接到服务器
# 修改前s=smtplib.SMTP(server)提示认证失败: (530, 'Error: A secure connection is requiered(such as ssl). 打开邮箱的POP3/SMTP服务,获取授权码(此后作为登录密码))
print s.ehlo()
code=s.ehlo()[0] #返回服务器特性
usesesmtp=1
if not (200<=code<=299):
usesesntp=0
code=s.helo()[0]
if nor (200<=code<=299):
raise SMTPHelloError(code,resp)
if usesesmtp and s.has_extn('auth'):#获取服务器允许发送文件的大小
print u'允许发送邮件的大小为'+s.esmtp_features['size']
if len(message)>int(s.esmtp_features['size']):
print u'邮件内容太大,程序中断'
sys.exit(2)

if usesesmtp and s.has_extn('auth'): #查看服务器是否支持认证
print u'\r\n使用认证连接.'
try:
s.login(username,password) #登录服务器
except smtplib.SMTPException as e:
print u'认证失败:',e
sys.exit(1)
else:
print u'服务器不支持认证,使用普通连接'
s.sendmail(fromaddr,toaddr,message)
except(socket.gaierror,socket.error,socket.herror,smtplib.SMTPException) as e:
print u'***邮件发送成功***'
print e
sys.exit(1)
else:
print u'***邮件发送成功***'

if __name__=="__main__":
auth_login()

命令行:

C:\Python27\Lib\text>python 发送邮件.py smtp.qq.com 发件人@qq.com 收件人@qq.com
input your username:
“发件人@qq.com”
input password:授权码
(250, ‘smtp.qq.com\nPIPELINING\nSIZE 73400320\nAUTH LOGIN PLAIN\nAUTH=LOGIN\nMAILCOMPRESS\n8BITMIME’)
允许发送邮件的大小为73400320

使用认证连接.
邮件发送成功

python实现SMTP编程

获得授权码后可直接存到文件中。

以下是来自网络的其他方法:
发送邮件的其他方法