Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过smtplib python引发异常时无法发送电子邮件_Python_Python 3.x_Exception_Smtplib - Fatal编程技术网

通过smtplib python引发异常时无法发送电子邮件

通过smtplib python引发异常时无法发送电子邮件,python,python-3.x,exception,smtplib,Python,Python 3.x,Exception,Smtplib,我希望创建一个脚本,当遇到错误时,会向我发送一封有关错误详细信息的电子邮件。 但是,当我在except block中调用该方法时,我不会收到任何电子邮件。但是,如果我写的是正常的,那就是除了区块外,我收到了邮件。你能告诉我哪里做错了吗 import smtplib from datetime import datetime import traceback def senderrormail(script, err, date, time, tb = 'none'): sender =

我希望创建一个脚本,当遇到错误时,会向我发送一封有关错误详细信息的电子邮件。 但是,当我在except block中调用该方法时,我不会收到任何电子邮件。但是,如果我写的是正常的,那就是除了区块外,我收到了邮件。你能告诉我哪里做错了吗

import smtplib
from datetime import datetime
import traceback
def senderrormail(script, err, date, time, tb = 'none'):
    sender = "Aayush Lakkad <alakkad@smtp.mailtrap.io>"
    receiver = "Aayush Lakkad <alakkad@smtp.mailtrap.io>"

    message = f"""\
    Subject: Hi Mailtrap
    To: {receiver}
    From: {sender}

    This is an alert mail,\n your python script for {script}\n has run into an error {err} \n\n on date {date} \t time {time} with {tb}"""
    try:
        with smtplib.SMTP('smtp.mailtrap.io', 2525) as server:
            server.login("xxxxxxx", "xxxxxxx")
            server.sendmail(sender, receiver, message)
            print('mail sent!')
    except:
        print('Mail not sent!')


now = datetime.now()
date = now.strftime("%d/%m/%Y")
time = now.strftime("%H:%M:%S")
try:
    raise TypeError('ohh')
except Exception as e:
    t = traceback.print_exc()
    senderrormail('emailalert', e, date, time)
    print(t)
导入smtplib
从日期时间导入日期时间
导入回溯
def senderrormail(脚本、错误、日期、时间、tb=‘无’):
发件人=“Aayush Lakkad”
接收人=“Aayush Lakkad”
消息=f“”\
主题:Hi Mailtrap
收件人:{receiver}
发件人:{sender}
这是一封警报邮件,\n您的{script}python脚本\n在日期{date}\t time{time}和{tb}时遇到错误{err}\n\n
尝试:
使用smtplib.SMTP('SMTP.mailtrap.io',2525)作为服务器:
服务器登录(“xxxxxxx”、“xxxxxxx”)
server.sendmail(发送者、接收者、消息)
打印('已发送邮件!')
除:
打印('未发送邮件!')
now=datetime.now()
日期=现在.strftime(“%d/%m/%Y”)
time=now.strftime(“%H:%M:%S”)
尝试:
raise TypeError('ohh')
例外情况除外,如e:
t=回溯。打印_exc()
senderrormail('emailalert',e,日期,时间)
打印(t)

您需要为开发者设置一个Google帐户。如果不想更改发送邮件的安全设置。有两种方法可以启动与电子邮件服务器的安全连接:

1.使用SMTP_SSL()启动一个从一开始就受保护的SMTP连接。 2.启动一个不安全的SMTP连接,然后可以使用.starttls()对其进行加密

我看到你用过

with smtplib.SMTP('smtp.mailtrap.io', 2525) as server

只需在目录中添加要查找错误的脚本,我建议您执行以下操作:

import smtplib, ssl
import sys
import filename #your script

def senderrormail(script, err, date, time, tb = 'none'):
    port = 465  
    smtp_server = "smtp.gmail.com"
    sender_email = "your_sending_email"
    receiver_email = "receiver_email"  
    password = "your password"

    message = f"""\
    Subject: Hi Mailtrap
    To: {receiver}
    From: {sender}

    This is an alert mail,\n your python script for {script}\n has run into an error {err} \n\n on date {date} \t time {time} with {tb}"""}

    context = ssl.create_default_context()

try:
    with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, message)
except:
    print("Mail not sent!")


now = datetime.now()
date = now.strftime("%d/%m/%Y")
time = now.strftime("%H:%M:%S")



try:
    t = traceback.print_exc(limit=None, file=filename, chain = True)
    senderrormail(fiename, t, date, time)
    print(t)    

except Exception as e:
    print("mail not sent")

希望这有帮助