解决Python通过STMP发送邮件出现socket.error: [Errno 10061]

     在学习Python通过STMP发送邮件过程中出现了socket.error: [Errno 10061]的问题。以下是出问题的代码。

# -*- coding:utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = '***@**.com'
receivers = ['***@**.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python SMTP 邮件发送测试', 'plain', 'utf-8')
message['From'] = Header("From测试", 'utf-8')
message['To'] =  Header("To测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender,receivers,message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

     经过查询之后发现需要在本机上安装sendmail,上述代码才可以正常执行。我没有装sendmail,所以想要了解的可自己查阅使用sendmail发送邮件。
     如果本机没有安装sendmail的话,则需要借助其他邮件服务商提供的SMTP访问(这里我使用的是163邮箱)。

# -*- coding:utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 第三方 SMTP 服务
mail_host="smtp.163.com"  #设置服务器
mail_user="***@163.com"   #用户名
mail_pass="***"   #口令

sender = '***@163.com'
receivers = '[***@163.com]'  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

message = MIMEText('Python SMTP 邮件发送测试', 'plain', 'utf-8')
message['From'] = Header("From测试",'utf-8')
message['To'] =  Header("To测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号
    smtpObj.login(mail_user,mail_pass)
    smtpObj.sendmail(sender, receivers, 
    message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

     这样就成功的完成了邮件的发送。注意:使用的sender和receivers 都需要在对应的邮箱设置中开启SMTP服务,否则发送不会成功。

References:
菜鸟教程-Python教程

你可能感兴趣的:(Python,python,SMTP,Errno10061,socket-err)