Python中运用SMTP发送邮件的事例,SMTP使用QQ邮箱公布失利的消除办法

By admin in 4858.com on 2019年2月19日

在应用contact form
7插件时遭遇邮件发送败北的题材,经过检查发现是因为服务器不扶助mail()函数,判断是或不是资助mail()函数可以参考。

一,SMTP发送邮件

自动化测试中,测试报告一般都需求发送给相关的人手,比较灵通的1个办法是每便执行完测试用例后,将测试报告(HTML、截图、附件)通过邮件情势发送。

原程序部分代码如下
  //设置邮件新闻 发件人地址、收件人地址、标题、宗旨
  MailMessage mail = new MailMessage(“xxxxxxx@sina.com”,
“zzzzzzz@sina.com”, “标题”, “主题”);
  //设置邮件核心格式
  mail.BodyEncoding = Encoding.UTF8;
  //设置邮件主体格式是不是为 html 格式
  mail.IsBodyHtml = false;

实际说化解办法:

此地PYTHON脚本完成的是登陆126的SMTP将邮件发送到QQ邮箱.
QQ邮箱利用的是加密STMP, 须求加密版本的童鞋请关切随后的更新.
TIPS: 我的本地环境是MAC系统, Windows环境急需修改相应的字符编码.

参照代码:send_mail.py

  //验证邮箱用户名 密码
  NetworkCredential work = new NetworkCredential(“xxxxxxx”, “pwd”);
   //验证 用户名 密码
  client.Credentials = work;

1.QQ邮箱要开启IMAP/SMTP服务

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib  
import email.encoders
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
import getpass
# Build a new attach instance
msg = MIMEMultipart()
# Mail configuration
Mail_subject = 'Python test mail'
Mail_content = 'Send with attachments'
Recipient_list = ['XXX@126.com', 'XXX@qq.com']
SMTP_server = "smtp.126.com"  
Username = raw_input('Please input your Username:')  
Password = getpass.getpass("Please input your Password: ")   
mail_postfix = "126.com" 
# Mail attachment
def attach(file_path, file_name, type, postfix):
    with open(file_path + "/" + file_name, 'rb') as f:
        # 设置附件的MIME和文件名,这里是png类型:
        mime = MIMEBase(type, postfix, filename = file_name)
        # 加上必要的头信息:
        mime.add_header('Content-Disposition', 'attachment', filename = file_name)
        mime.add_header('Content-ID', '<0>')
        mime.add_header('X-Attachment-Id', '0')
        # 把附件的内容读进来:
        mime.set_payload(f.read())
        # 用Base64编码:
        email.encoders.encode_base64(mime)
        # 添加到MIMEMultipart:
        msg.attach(mime)
  
def send_mail(recipient, title, content): 
    # Mail info
    author = "%s<%s@%s>" %(Username, Username, mail_postfix)
    msg['Subject'] = title  
    msg['From'] = author  
    msg['To'] = ";".join(recipient)
    # send attachment
    msg.attach(MIMEText(content, 'plain', 'utf-8'))
    attach('/Users/XXX/Pictures/com.tencent.ScreenCapture','QQ20150827-1.png', 'image', 'png')
    attach('/Users/XXX/Work/Python','test01.py', 'txt', 'py')
    attach('/Users/XXX/Work/Python','test.zip', 'zip', 'zip')
    try:  
        server = smtplib.SMTP()
        server.set_debuglevel(1) 
        server.connect(SMTP_server)  
        server.login(Username, Password)  
        server.sendmail(author, recipient, msg.as_string())  
        server.quit()  
        return True  
    except Exception, e:
        print str(e)
        return False

if __name__ == '__main__': 
    if send_mail(Recipient_list, Mail_subject, Mail_content): 
        print "Sent Successfully"  
    else: 
        print "Sent Failure"

 

  //设置邮箱smtp服务器 端口
Python中运用SMTP发送邮件的事例,SMTP使用QQ邮箱公布失利的消除办法。  SmtpClient client = new SmtpClient(“smtp.sina.com”);
 
  //是不是请求一起发送
  client.UseDefaultCredentials = false;
  //设置邮件发送格式
  client.DeliveryMethod = SmtpDeliveryMethod.Network;
  //安全连接装置
  client.EnableSsl = false;

  在QQ邮箱的装置里面

二,SMTP(SSL)发送邮件

一、python对SMTP的支持

  client.Send(mail);
  
  错误一:

4858.com 1

那边必要留意的是我们使用QQ邮箱(SMTL over SSL)时,
需求首先在其网页客户端后台打开SMTP/POP服务,
并且设置QQ邮箱独立密码作为SMTP登陆密码,
那样在行使MUA时就不会报Authentication failed的错误.
QQ邮箱 POP3端口: 995 SMTP端口: 587
密码使用QQ邮箱独立密码

SMTP(Simple
Mail Transfer Protocol)是粗略传输协议,它是一组用于用于由源地址到目标地址的邮件传输规则。

“/”应用程序中的服务器错误。

SMTP 服务器需要平安连接或客户端未经过身份验证。 服务器响应为: 5.7.1
Client was not authenticated 
注脚: 执行当前 Web
请求时期,出现未经处理的老大。请检查堆栈跟踪新闻,以理解关于该错误以及代码中造成错误的出处的详细消息。

尤其详细新闻: System.Net.Mail.SmtpException: SMTP
服务器需求平安连接或客户端未通过身份验证。 服务器响应为: 5.7.1 Client
was not authenticated

不留余地办法  :
  //设置邮箱smtp服务器 端口
  SmtpClient client = new SmtpClient(“smtp.sina.com”,587); 
  消除表达:我加上了端口号,587属于发送邮件端口  
一般出现此错误会出现在你设置的163的接受者时爆发   QQ的没有失常态!

  错误二 :

2.端口设置

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib  
import email.encoders
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
import getpass
# Build a new attach instance
msg = MIMEMultipart()
# Mail configuration
Mail_subject = 'Python test mail'
Mail_content = 'Send with pic attachment'
Recipient_list = ['XXX@126.com', 'XXX@qq.com']
SMTP_server = "smtp.qq.com"  
SMTP_port = "587"
Username = raw_input('Please input your Username:')  
Password = getpass.getpass("Please input your Password: ")   
mail_postfix = "qq.com" 
# Mail attachment
def attach(file_path, file_name, type, postfix):
    with open(file_path + "/" + file_name, 'rb') as f:
        # 设置附件的MIME和文件名,这里是png类型:
        mime = MIMEBase(type, postfix, filename = file_name)
        # 加上必要的头信息:
        mime.add_header('Content-Disposition', 'attachment', filename = file_name)
        mime.add_header('Content-ID', '<0>')
        mime.add_header('X-Attachment-Id', '0')
        # 把附件的内容读进来:
        mime.set_payload(f.read())
        # 用Base64编码:
        email.encoders.encode_base64(mime)
        # 添加到MIMEMultipart:
        msg.attach(mime)
  
def send_mail(recipient, title, content): 
    # Mail info
    author = "%s<%s@%s>" %(Username, Username, mail_postfix)
    msg['Subject'] = title  
    msg['From'] = author  
    msg['To'] = ";".join(recipient)
    # Send attachment
    msg.attach(MIMEText(content, 'plain', 'utf-8'))
    attach('/Users/XXX/Pictures/com.tencent.ScreenCapture','QQ20150827-1.png', 'image', 'png')
    attach('/Users/XXX/Work/Python','test01.py', 'txt', 'py')
    attach('/Users/XXX/Work/Python','test.zip', 'zip', 'zip')
    try:  
        server = smtplib.SMTP(SMTP_server, SMTP_port)
        server.starttls()
        server.set_debuglevel(1)   
        server.login(Username, Password)  
        server.sendmail(author, recipient, msg.as_string())  
        server.quit()  
        return True  
    except Exception, e:
        print str(e)
        return False

if __name__ == '__main__': 
    if send_mail(Recipient_list, Mail_subject, Mail_content): 
        print "Sent Successfully"  
    else: 
        print "Sent Failure"

python中对SMTP进行了简要的卷入,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

    “/”应用程序中的服务器错误。

服务器不扶助七台河连接。 
证实: 执行当前 Web
请求时期,出现未经处理的百般。请检查堆栈跟踪音信,以领悟关于该错误以及代码中导致错误的出处的详细音信。

拾贰分详细音讯: System.Net.Mail.SmtpException: 服务器不帮忙达州连接。  
小编将 //安全连接装置   client.EnableSsl = True;后暴发的谬误

缓解格局 :方法一 设置成“client.EnableSsl = false ”或去掉那句代码
           方法二 开启安全连接服务

 错误三:
   SMTP 服务器须求平安连接或客户端未通过身份验证。 服务器响应为:
Authentication required  
库房跟踪:  
  [SmtpException: SMTP 服务器须求平安连接或客户端未通过身份验证。
服务器响应为: Authentication required]

  化解格局:
   client.EnableSsl = false; 改为 client.EnableSsl = true; 
可是那样该后或者相会世“错误二”的升迁,所以要缓解
以此的话 首先保险服务器是永葆巴中连接的
  那个或许对你有用 

  错误四:
   SMTP 服务器必要平安连接或客户端未经过身份验证。 服务器响应为: 
   5.7.0 Must issue a STARTTLS command first. 9sm5225813ywf.35

   化解方法:sina要求用ssl连接 可以改一下true  
 

 

万能缓解方式:
1,POP3和SMTP服务器要填正确
2,服务器的端口要正确
3,小编的服务器须求身份注解
4,发送邮件的用户名和密码要科学

//设置邮箱smtp服务器 端口
  SmtpClient client = new SmtpClient(“smtp.sina.com”,587);
就足以了 
163的最固执了!须要注意点 QQ最好过!呵呵 

稍加时候邮件被退信的来头 
提供以下消除方法:

 

 

  WP Mail SMTP插件的装置中,STMP Host填stmp.qq.com,STMP Port填465

1、python对SMTP的支持

3.账号和密码

①email模块:负责构建邮件

  Username填的是QQ邮箱,密码填的不是邮箱密码,而是转变的授权码。

②smtplib模块:负责发送邮件

4858.com 2

可以透过help()方法查看SMTP提供的点子:

 

 1 >>> from smtplib import SMTP
 2 >>> help(SMTP)
 3 Help on class SMTP in module smtplib:
 4 
 5 class SMTP(builtins.object)
 6  |  This class manages a connection to an SMTP or ESMTP server.
 7  |  SMTP Objects:
 8  |      SMTP objects have the following attributes:
 9  |          helo_resp
10  |              This is the message given by the server in response to the
11  |              most recent HELO command.
12  |  
13  |          ehlo_resp
14  |              This is the message given by the server in response to the
15  |              most recent EHLO command. This is usually multiline.
16  |  
17  |          does_esmtp
18  |              This is a True value _after you do an EHLO command_, if the
19  |              server supports ESMTP.
20  |              ......

最后发一下自作者的设置页面 

 导入SMTP,查看对象注释。。。。。。

 

 

4858.com 3

二 、sendmail()方法的采取说明

4858.com, 

①connect(host,port)方法参数表明

 
host:内定连接的信箱服务器

 
port:钦定连接的服务器端口

②login(user,password)方法参数表明

 
user:登录邮箱用户名

 
password:登录邮箱密码

③sendmail(from-addr,to_addrs,msg…)方法参数表达

 
from_addr:邮件发送者地址

 
to_addrs:字符串列表,邮件发送地址

 
msg:发送音信

④quit():甘休如今对话

 

② 、发送不一样格式的邮件

① 、纯文本格式的邮件

 1 # coding=utf-8
 2 import smtplib
 3 from email.mime.text import MIMEText
 4 # 发送纯文本格式的邮件
 5 msg = MIMEText('hello,send by python_test...','plain','utf-8')
 6 #发送邮箱地址
 7 sender = 'sender@163.com'
 8 #邮箱授权码,非登陆密码
 9 password = '123456'
10 #收件箱地址
11 receiver = 'receiver@qq.com'
12 #smtp服务器
13 smtp_server = 'smtp.163.com'
14 #发送邮箱地址
15 msg['From'] = sender
16 #收件箱地址
17 msg['To'] = receiver
18 #主题
19 msg['Subject'] = 'from IMYalost'
20 server = smtplib.SMTP(smtp_server,25)
21 
22 server.login(sender,password)
23 server.sendmail(sender,receiver,msg.as_string())
24 server.quit()

login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,可以一遍发放三人,所以传入2个list,邮件正文是三个str,as_string()把MIMEText对象变成str。

为了便利演示,那里用的是163和QQ邮箱,收到的邮件内容如下:

4858.com 4

 

② 、HTML格式的邮件

若果想发送HTML类型的邮件,只须求上面的一段代码即可:

1 # coding=utf-8
2 import smtplib
3 from email.mime.text import MIMEText
4 # 发送HTML格式的邮件
5 msg = MIMEText('<html><h1>人生苦短,我用python</html></h1>','html','utf-8')

收下的邮件内容如下:

4858.com 5

PS:在意那里的分别,msg中输入的是邮件正文,由此须要基于具体内容格式选取恰当的档次!

至于不相同门类文件的呼应项目,可参照此链接:HTTP
Content-type 对照表

 

三 、邮件格式的涉及

结构多少个邮件对象就是二个message对象,若是社团三个MIMEText目标,就代表一个文书邮件对象,即便社团贰个MIMEImage目的,就象征1个作为附件的图片;

要把三个目标组合起来,就用MIMEMultipart对象,而MIMEBase能够象征其他对象。它们的持续关系如下:

1 Message
2 +- MIMEBase
3    +- MIMEMultipart
4    +- MIMENonMultipart
5       +- MIMEMessage
6       +- MIMEText
7       +- MIMEImage

可以透过email.mime文档查阅它们所在的包以及详细的用法。

 

叁 、SMTP发送邮件之坑

壹 、协议之坑

因为使用的是SMTP协议,那么须求确保本身的殡葬优邮箱地址开启了SMTP服务,否则,会报错

4858.com 6

4858.com 7

 

2、password之坑

看了众多例证,都以将邮箱登录密码设置为password,然后就华丽丽的懵逼了,报错!!!whf!!!

实际的面目是:password须求输入邮箱授权码,而非邮箱登录密码!!!

 

叁 、各样报错

本人在调节的时候,碰到不少的报错,大多都是那几个:smtplib.SMTPDataError(55五分三54…)

基于报错里面的链接:see ,找到相应的题材,仔细检查代码,渐渐debug吧。。。

PS:即使收件邮箱的传输通过加密,必须通过SSL加密再STMP传输,出现554(发送的邮件内容涵盖了未被认同的音信,或被系统识别为垃圾邮件),爆发了一件有趣的业务:

 
 
新浪邮箱的处理结果是暴发回退,即邮件发送战败,转回了收件箱。。。

 
  QQ邮箱的处理结果,是将邮件放进垃圾邮件里面。。。

计算:爆发报错的原故恐怕技艺不到家,不够细致啊,唉,年轻人。。。

附:常用的邮箱服务器(POP叁 、SMTP)地址、端口

 

应用python对SMTP的放毕节装援救,发送邮件的代码和注意事项基本就是上述几点,当然,其中的代码都以demo,具体执行进程还要求依照实际景况做调整。。。

 
  

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有