python发邮脚本运行每次都报socket.error: [Errno 110] Connection timed out ,用别人的机器也报

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python发邮脚本运行每次都报socket.error: [Errno 110] Connection timed out ,用别人的机器也报相关的知识,希望对你有一定的参考价值。

我的code:
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText

#python 2.3.*: email.Utils email.Encoders
from email.utils import COMMASPACE,formatdate
from email import encoders

import os

#server['name'], server['user'], server['passwd']
class MyEmail:
def __init__(self,server, fro, to, subject, text, files=[]):
self.serv = server
self.send_from = fro
self.send_to = to
self.sbj_content = subject
self.text_content = text
self.add_files = files
pass
def SendMail(self):
server = self.serv
msg = MIMEMultipart()
msg['From'] = self.send_from
msg['Subject'] = self.sbj_content
msg['To'] = COMMASPACE.join(self.send_to) #COMMASPACE==', '
msg['Date'] = formatdate(localtime=True)
msg.attach(MIMEText(self.text_content))

for file in self.add_files:
part = MIMEBase('application', 'octet-stream') #'octet-stream': binary data
part.set_payload(open(file, 'rb').read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))
msg.attach(part)

import smtplib
smtp = smtplib.SMTP(server['name'])
smtp.login(server['user'], server['passwd'])
smtp.sendmail(self.send_from, self.send_to, msg.as_string())
smtp.close()
def RecvMail(self):
pass

这个简单啊。邮件服务器需要验证。你这里协议没有对。所以你的程序一直在等服务器正确的响应。所以当然超时了。要自己改一下发送协议,加上验证。验证方法有几种,要根据返回结果确认是什么样的验证。追问

一样的code,在家能发在公司就不能
我现在怀疑是公司的PATh有问题,请问如何定位这样的问题啊,我很水

追答

可能真的是网络问题。你家里的是ADSL,在公司可能还需要过一个代理以及企业的防火墙。所以有些东西可能是被屏蔽了。

通常你可以用telnet :25, 或者是telnet :110,
如果返回连接成功后,你按ESCAPE,再打几个回车有回应,应该就是网络没有问题。

参考技术A 推荐使用turbomail模块发邮件 参考技术B 错误都提示了. 连接超时. 看看服务器ip,端口什么的有没配置好.追问

但是手动发邮件可以 搞不懂 我这个脚本也没有指定什么端口啊

追答

用命令行连接下smtp服务器试试。 如果通过就再检查下pytthon程序的邮件配置内容

追问

如何用命令链接smtp服务器求解?

追答

百度下 "cmd smtp"

如何遍历整个python脚本,并且每次更改订单都会运行

我正在尝试创建一个在Linux系统后台运行的脚本。我希望它检查是否满足某些条件;一旦他们有,跳过该部分代码,不再检查。

Loop = True
while True:
  V1 = None
  while True:
    print("Checked for vulnerability")
    if my_file.is_file():
        print('Virus is still there')
        time.sleep(6)
        os.system("rm /home/levi/Desktop/Trojan")
    else:
        print('Virus removed')
        V1 = False
        break

  print('Did this work')

我需要检查V1:if True,然后执行循环。当它循环时,将值设置为False并结束脚本 - 但它会卡在else语句中并且永远不会结束。我从未见过“做过这件事”。

答案

你已经把自己绑成了一个双无限循环的结。你设置了两个变量(Loop和V1,两个都是不好的名字),从不使用任何一个来控制循环。试试这个:当你完成时,只需要break循环。

while True:
    print("Checked for vulnerability")
    if my_file.is_file():
        print('Virus is still there')
        time.sleep(6)
        os.system("rm /home/levi/Desktop/Trojan")
    else:
        print('Virus removed')
        break

print('Did this work')
另一答案

你有两个无限循环,只能用break语句结束。你的代码中有一个break语句,但只有一个。 break语句只会突破它所处的最内部循环,在这种情况下,你的内部while循环。因此外部while循环永远不会结束。虽然有更好的编写代码的方法(如Prune指出的那样),但我会给出一个与原始代码紧密相关的建议:

V1 = True
while V1 is True:
    print("Checked for vulnerability")
    if my_file.is_file():
        print('Virus is still there')
        time.sleep(6)
        os.system("rm /home/levi/Desktop/Trojan")
    else:
        print('Virus removed')
        V1 = False

print('Did this work')

我仍然删除了外部的while循环,因为它没有任何目的。当然,除非您要向外循环添加更多内容而不仅仅是其他循环,否则您应该重新添加它。但是,在这种情况下,您应该按以下方式定义代码:

loop = True
V1 = True
while loop is True:
    while V1 is True:
        print("Checked for vulnerability")
        if my_file.is_file():
            print('Virus is still there')
            time.sleep(6)
            os.system("rm /home/levi/Desktop/Trojan")
        else:
            print('Virus removed')
            V1 = False
    # do something else here after ending the inner while loop

print('Did this work')

这确保了内部while循环只执行一次,无论外循环迭代多少次。

以上是关于python发邮脚本运行每次都报socket.error: [Errno 110] Connection timed out ,用别人的机器也报的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历整个python脚本,并且每次更改订单都会运行

hbase连接java时,zookeeper总是连接不上,但是确实已经启动,每次连接,都报错

为啥安装不了JAVAsetup8u241,每次都报这个错误,求解答。

每次在 Python 脚本中进行更改时,VS Code 都会打开新浏览器

如何让python 脚本在指定的时间内运行?

如何仅在代码第一次运行时在 python 中运行函数?